// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @title: Celestial Creatures
/// @author: manifold.xyz
import "./manifold/ERC721Creator.sol";
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// //
// `.. ".` - ` //
// `'" `` ` <7<= . '"" ` //
// `'= - "; ` +@$7Vn `" ` //
// '-(. ,((=`;'` -(F(+- . //
// ,)(- )<;<-;r; '. ` . //
// ')!( 'z;f' ` .,;<' ` ``'.` ` .` .. //
// ,)!Y` ", rcr)- =;<11` . ''' '!'!' `'` '. //
// .))F; )7` !C()" `-<(` ' `'". ,nYne*c"`` ` '-. ..,. //
// `))c$ `zz" ;1+)" '- . -F*zz (77zzYzF5" `` ` '' ."'. -,. //
// .))!S! `zYf."F+),. ';` .` .,'-` ;z!f))czF- .'` `""` 'r,`. -r-` //
// -))+VB fn+r"Yf)," `,r` . ` `. -. " - !E7F7Fn; `'-'` .`''=, '<-``' ";;' ` //
// ;-)))Br )1+)"z+)"; -r. ` , -( .` `.`. = `;"` ``',,,'. .'...;" .zr`` - r!='' '. //
// ;;!)!6B -ez+++)))-" .r,` ' -, . ,S`` ,' !@V `-` r. ` ` ` .',',,,,'` ;'.`.-" `Yr`` .- =!<'.- ",' //
// '<,)))B! r<< znz);z+)-< ,"' ..'r` . .`. `-'``!; "Q(<c),)#c;@@@n!Y@z.`!@!r;(=.,"c<" .` '' ..,,--,',,. ,.rr.```," Fr ` .-. `(;!'.;. -<-, //
// `;()))1B. )=n@, '*Y)+cz))<. `,!c'`r'." `'' `,'''--' `r=!7+)=9@;c@@@@9*@@S7@@@@@@@@#c&@zE@@9n0@@@*,!rV+r`;<. rz" . .``' ',."";",'''` `<<;.` `."" . `*- ` `-- `<!!'';! `z<= //
// `'Y"));%z `,, `.cn))!)))f< `-9=;(7Y", `!<f(, `` `;"r;!+("-$@*@e@e@@=c$Q@@F@&@#%@@@@@@@@@@@@n@@@9#@@@@=A@@9@C+@@)r@@@+!7!-',nC-r,..,--. `"..r"<r,'... ++r'```.'(` .`'S` ` '", `=<<..r=; "1f" //
// ``rz,))!5= ,,<Vc)+(f))(' (d<!#C)+,` ;f!)zzc< ` -;".(61QUEQ$$n@@@#@#Q@<!#@@@1@&@VE@@@@@@@@@@@@&@@@U*@@@#(@@@E@nQ@@c&@@@@9@EC@@@@#E#FCQ#c,. `.'r`-"r(r,'... "z,,`.``-rr '`rn ``. .;,` ,=!<'."rz `Yz(. //
// '.'(=)))(B, `,""cC+)!!))+) c$zFQzCzr` n7)++Ycf'' -�@e;@@@@99@@7@@@9@@&@*;9@@@F@C@#&@@@@@@@@@@@#9@9@F)@@@=F@@eQ@7@@@CQ@@@@@@@@@@@@@@@@@@@e))`,!-' .. `'!!."-=(r,.`..` .C,,`'..;"= ,`+) `.) `!'` .;!<'.,.)< cn(= //
// Y,.,("))+z$ .;(=rz7)+r!))+" zCc*B*7(<. ;nnnAVE@@9@@@@@@@n=@@@@#M@U9@@9Q@Y@@!@@@@z@$M@5@@@@@@@@@@@E@@n9@(@@@;0@@z@#&@@@f@@@@#@@@@@@@0Q@@M@@@@@Ce@@1-.`,f=``` .zf-'-;++-'...,` -F,,')'')-; ".*r r) .r.. `"<=',,`"Y` <Y(<' //
// C)'."!-))+V7 "cr)rY+)fr)))+ F1)EBn;"Y' ` `.,;+n@@1n@@@@M@@@@@e+@@@@#@@*@@@Q@z@@<@@@@+@U#@1@@@@@@@@@@@*@@c@@Y@@9!@@@$@f@@@Qz@@@A@@@@#@@Q&@@F@9@@@#@@@@7n=nM@zr"``"=7=.,r=f;''''.' -),,,)',)rr'`"'E. `))`.-`` `-)<-)r`'Y+ =z(<' //
// Yc','7f=++c@7 .=7;);7++c!))+< zd<FdF"'1r ` '' ``.,```.'"(&zY##0@##@@@@9@@@@@eY@@@@%@1@@@@@F@@(@@#@(@UC@n@@@@@@@@@@@V@@c@AF@@+f@@C@@+@@@z@@@@*@@@A@@@z@@)9@e@@#C@@@d@e@@@@M(=f#+-(),,r"<+,','``' ,!,';)-));--,,r1 .)).'. ` `"c!r))..(c` !+r<' //
// ('.'-7Y<=++c@" .)())!++ff)))z" F6!z&f)'n=. ,``, ``` ,'r=)9F";$&@#@@@@@@@Q9@@Q@@@@@7#@@@@Ee0@@@@@Q@z@@e@+@A7@C@@@@@@@@@@Q@@$7@10@B!M@9*@F9@@@c@@@F@@@%M@@f@@cc@*9@Ec@Q@#@#9#@@@@9@@@!;F#z--r!n;,''``- '!-,c))));-,,')+ `")-''` ` `!z;)))-."c) ;<!<'` . //
// ,'`',czY((++c0` `)!))r<+ff)))7' +F;7M+),c), ` -("!)#zY&0@Q;(&9@#@@@@@9@@E0M9@@@@@f@@@@@nV@@@@@@@1@@@@z@A7@*@@@@@@@@@@U@@zB@CE@$<@E$@@<Q@@7Q@@1Q@@En@@+@@YF@UC@E(@@@z9@9*Q@@@@@@@Qe@@@@r,;+#=,',`."`'=,"f+))+="',.1- .))',. ` '+)-)))"'"c+` .!=!;. ' ,' //
// `''`',="c;!))cV ;))))'!+c+)))+' .,,!(rnd+)-(F, ,,'``";"n@&@@@@@%A@@=fE@@9@@@@QQ@@@@f9@Q@@@c@@@@@C@@@@@@@5Q@@@Y@Sz@Q@@@@@@@@@@V@@f@@nA@fA@cQ@@@M@1V@@ES@@E70@Q*Vc@@Y$@Q=@@@cY@@9&&@@@@@@@@@@@@@;-=7@<,,-,."`r=,+f))fc;-''rn `")).,` ' !f;-+)+"'"f+" '!;!r` '' ,- //
// .,,..,,,.)"r))zF ,=!))).;++))))(, r,,);-F5+)-r6". .r=;,)Q0+E@0@@@@@&1@@=nF@@@@@@@@@@@@@fQ@@@@M@@@@@Q@@@@@@@0$@@@6@Yn@@@@@@@@@@@V0@@(@@Y@@)@QC@@@@@@U@@@M@@6**@M@@@@Q%!@C+@@Af7E7<@@d%9@@@@@@@@0@@=r<c97-r=r'""cr;zf!=77;,'.7; ;)+,,' ' ,c)";+)+"'"f+) `-;r!".`.r 'r. //
// ,`'-''""-')r"))zY `,<r))).;++))))!r` `,;`.f,(Qz)r,C<' ''`.!)+7*&@@Cn@@@@@@enz@@f@f@@@@@@@@@@@@@+0@@@@@@@@BCFE@@@@@@A@@@@@e@@@@@@@@@@@@@@@@&@d1@@z@7Q@@@@@S@@@@@@@9Y@@@@@@9@@UFn@@@(7eC))e@@66@@@@@@@@@@@(;=cd1r;(r;(Cf!Y7=!=(=-''"e`-+)).r` . `<nr"c))+",!f+). .rr"=-..`+,`!' //
// r,,"-,'--,.))"))zC .,<r))).=)+)))";=` .,"=`r;'5n)!-<Y,` ,..!(;)U1$0@MQ@Q7@@@@@C@Ec@7@@)@@@@@@@@@@@@@f@@@@@@@dz)r+V@@@@@9@@@@@@@@@@@@@@@@@@@@@@@@1@@C1@C@@@@@@@@@@@@@5Y@@@@@@@@@@@@@@@f1@dCS@#d@#*V@@@@@@@@@@(;!+BE==c=+c$+CCz!(((<--'$r.f+)`"" ` , "nz,rf)+f"-+f++' 'r-;<,''."f r'` //
// !f',+,-,-",'))r))c*` ,,<;)))")++))),!<'.-,r,`!.fnf)-"7". .` `;CUFe#*CM@1#@@Q@@n@@@@@@@#<9@@@+@@@@@@@@@@@@@A@@@@@@@Vn7n@@@@@@M@@@@@@@@@@@@@@@@@@@@@@@@@@@@cYn@@@@@@@@@@@@Q$@@@@@@@@@@@@6@@7C@@e@@@@@@@BYn@@B@@@@@5=!!)dB(f+=)%1*V1Fn)<);"')+.cf+,.). ` , .(7r"c+)+frr+f++' `-""(<,,,''f`'!'. //
// -;<,"f"",r;-'))!))+7'`r-!+)))-)+))))"z)-;-,r.,"!Yc)-";!,` .+7Y)<f@@@@@@&@@9E@@@@@5@@@@@@@EY@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@zz@@@@@@@@@@@@@@@@S*E@@@@@@9@@@Y0@6@@&$@@@@9c+n@@A%@@@Ffc<cMV+7)!CU$@AV$Y)<F<"<7,;zc+',. ` ".`!7c"(f)+ffr+ff++' '--=nz,--,'f'`<"- //
// ,,r<r"c";-;<r,;)))))+. +r;))))"))))))(f`!),r-.";;))r",r-,` .(@@@@@YC@@@@@0@@@E@@M@@@@@@@@@@En@@@@7@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*YYC@d@@@@@@@@@@@@@@@@@C!zQ@@@@%@@@@@@@@@@@@@@@@@Y=f0@B@@A@n+c!z@C7FfY&V#AE%@#C*7c7Crrz7zrr,```"<-)cf<c+)+ff(+ff++'`',"7Y+"rr-,;,.=!', //
// ',,r<=rc+)-;))-+)++))f'`;+r!)))"++))))n'`(+-"'';r)))"r-';..` `,,-"1@@@@@Ff@@@@@@9@@Q@@9@@@@@@@@@@*V@@@@Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@e+)-)1E@@@@@@@@@@@@@@@@@@%#@@@@@@@@@@@@@@@@@@@@@@@n<<V@UB6@@(fcre@ne1z&6@6V@@Bzf<7#@)!77Yc+r'',rC=c+fff++fff++f+)!...,(nc)!!r,'r,'!).; //
// ..,-"=("+f)-"))";))=))=,`,)r()++rrcf+zn).'f=,,,-(=));r-;)- -,'..`"YB1)!<%@@@@QcU@@@@@M@@@@@@Q@@@@@@@@@#0@@@@@@@@@*7@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&@@@@@@@@*zzFS@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@@@Q@@@@$)=F@B@@@*fcc!d@CU7B*U@U@9fr""!#@C+nFF7c+-,r;C7ffff++fcf++ff++".`.!1z++=r,''r,,;+,-- //
// ...,"r!f;+f);";!",!))))(".')r+f7",";<7F7-'"(r'''(c)))"r"!<. -<!(+!<cV*c77n9@@@@eY@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@V7(f@@@@@7fcr)@S6EAEY@@#f;"rr(#@nY1CnY7+""<<Y1+f+++fff++ff++f,..r7Y+)fr,,,,;"-=c".) //
// ....'-"+7fc++)-;))--)))));'.;)+z("));"!)z,';(!,',Yc)))r;<((,';fz77z7c+n#@@#EM@@@@C9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WW@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@W65AS0@@@@@@@@@@@WW@@@@@@@@@@@@@@Q@@@@ncf+Q@@@1fc=rB@#SES1@Sf;"rr=7Q9YF11CYYf;())c$f+++ffcf+fff+f"'';CYf)fr,,r;;!"-)C".+. //
// ``....'-!!f(c+);))))"))))));.,)+zfr")!-"<z"'r<(,'!Y++++!;)Yf<=<7E$V%#UY1@@@@@Q@@@@@6@@@@@@@@@@@@@@@@@@@@@@@@@@@@WMMMS5&WMMMMMMB5EeV$$VUM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0B%0W@@@@@@@@@@@@@@@@@@@@@WW@@@@@@@@@&@@@@FfzfBS@Vfffc(@dUeQeeY!""r!+Q@e71A*CFYc<+nFC$f+++cccffccffr,-<nYf+!",-!c;r!--+n"'") //
// .``.'...'"";))c+);;))!)))))))-,))cF<",r;";c!-r!+!rfz+ffc<!cFz11Y9@@@@@5f1@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5177CY7Yn$$$eeE5MMMMMMMMM5e$$A0@@@@@@@@dzd@@@@@@@@@@@@@@00@@@@@@@@@@@@@@7)1@@@@@@@@@@@@@@@@@@@@@9@@@Uc+7FS@%cf;(;&@BEeFc+<rr<cA@@$1BS$CFYz+f*@dCf++czzcf=zzc!"rfCYcf"""rfffr==,rCz","+' //
// -",'..'''',"-!+Yc+))!))))))))))r;)+zF;,'rr"+)!;=f++zc+fczc<+YY&@@@@@@@@e@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@MCc<)!;<<<==!<nW@@@@@@W00000MMQ%eVAM@@@@@@@@@@@@@@@@@@@Wd6@@@@@@@@@@@@@@@@$FS@@@@@@@@@@@@@@@@@@@@&@@SAF+cYd@@7c";;6@9dncf=!=F$#@M1C1M@eCFYz+z&@dY+fzYYzc=!<<!!(C1Yc;""r+++fr;7!,<B),"r!! //
// ."!!;",..','--,;<f7f);"!!)))))))++))c7)r',+;=(!77ccf7c+fc77z+nFQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@d$$Q%)<+==;""<B@@@@@@@@@@@@@@0000MMQAUM0@@@@@@@@@@@@@@Me&@@@W00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@66e1@@@Ec++U@dzcr!=Y@5Czc<)cV%%*Y7;(9@@A$nFzfYQ@$zfzYnnYY(cYYF*e17<""r++ffc<;zz-rcY",r!<) //
// ..,"fz)<r-'',,,,'-;+Yf);"";!))))))ff=zFn)r,"<;;<FY7zcYzfccYYz)czB@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WeMMM1$BcY7=!n@@@00W@@@@@@@@@@@@@@@@@WMMQMM@@@@@@@@@0EVd@@@W00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0%nnA@@@Y+zV#57z;(<)6*nYc7Fee$Fzc;<Y@@%E5$CzcV@@1zzn$#SeFY%B9@enz<r;++fcYF(<cc"-fn=-"=ff" //
// `.',-"=fzY<!"'.'''''"<Yz+r"";!))))+(Y(;YC1c;-r=(fCYFF7F7cczFCz<(FA@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@000MM@&CQQ&B@@00ASBQ@@@@@@@@@@@@@WW@@@@00000@@@@@BeU@@@@000@@@@@@@@@@@@@Q*77V@@@@@@@@@@@@@@@Ue@#YY@@@zfFd&AY7(F+(EeVV*5V1n7c==f#@@AeS@UCYF@@@EYCe6Un<16&@51Yc!=++c7nnY+<cf!-<1)"rcffc- //
// .,";!;=)+fz<;"-'.''.'r(7c+!;=+++<"=<;++zn*7!r!7FFFnCn1CzccFVFc!fF@@@@@@@@@@@@@ez))n@@@@@@@@@@@@@@@@000W@@@@@@@MQ@00@@0@@@@@@@@@@@@@@@@@@@@@W0MMMMMMM%UAMW@@@@W00W@@@@@@@@@@@@@@@e7!=F%@@@@@@@@@@@@BS@@1Cne@@7zn09%YFfY<c@@0eV*n7cczfC@@@@&@B@51CE@@@*CA@An=<1@5*F7c++fYn**CY7)zfc!<z+;fcc+ff` //
// ``.-))))))))+f(!;",''.'-=77cf++fz7zc();)fzFnC(=(FCnnC1EEYcc7V*zc(f#@@@@@@@@@@@ez))F#@5@@@@@@@@@@06SSBM00@@@@@@@M@@@@@@@@6UUAUeVV6@@@@@@@@@@@@@@000000@@@@@@000@@@@@5@@@@@@@@@@@@@5VeQ@@@@@@@@@@60@@@MzYFV@En71@@ACczf<E@@S*nY77YY$AS*Yzze@@@e$V@@@d$e@%f<cVd$nY7c+fz$@@VCFnnYcffzz)=+czf+f+ ` //
// .'-''''"))))))));";<(<<;"--"!z77cfc7Ynn$Y<!+fzYFCc)fCnFC1EdCzcz1eFf;)n@@@@@@@@@@@@@@@@@@@@@@@@@@@%AASM0MM00W@@@@@@@@@@0ec(<<+7Y7n*1n*@@@@@@0MM0@@@@@@@@@@0MMMM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0W@@@@#CFCV@e*1E@@eCzc)+9@A*Cnncz1SU$nzc7n$@@@$E#@@@SU65YfYAB*Y7zcc7*@@#*nC11Fzznn7(<fczc++f( ' `,";=)++7CY //
// `'r,`,";!)f++))))))!;=(+z+<!""!z77Y(;+cY$U1+cfz7FC*YF$*CC1A@VY77Ce*c!<c@@@@@@@@@@@@@@@@@@@@@@@@0AY1%00B%0M0000000@WMA0Y+<r'..,;<<cnEVYC@@@@@@MQMM0WMMMMMMMM00MM@@@@@@@@@@@@@@@@@@@@@@@@@@@@BB&@Vze@Qen1e9@dU5@@61cf))1@SV**7nUVU$nFYYC5@@@@6E@@@@@@dVFYC%eC7zzzFE@@@VnCVSVF77*S$zfczzcf+++, `, `'"<C$$$eQMMMQ%QQE //
// ``"!,'.,;!!)FY7cf+))))))+fcz+=;r!)Yn+<f++z15BY+zYC*eEEUE$*$5@UnYYCEAY+!f@@@@@@@@@@@@@@@@@@@@@@0A*SM06SSQMBB6dM0W00MMec(r. `..,";<f#M*7*@@@@@WMMQM@@0MMMMM0000M0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BF1$VVA@@@@@@@9$Y7cfn9@AFYYFYCE1CV$V5@@@@@@6@@@@@@@5$1e5$F7zYCA@@@UnF*Sd$F7nUd1cf7Y7zcf++r .-` `."<FVQQMQS$%ee$1);-. //
// '.`-=;;'')"-";<+FYY7zzccffff=<(<=!=fY17c7f+zC%dCf7YC$E5%$CC1VQ&$CFCVQ*;;f@@@@@@@@@@@@@@@@@@@@@A5&0d5YV#M%S%QM0@0MMMAF<-. ',',r;<(C&57n@@@@@@0MQQ0@0MQMMMMMM00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@00AVeSSSSAU6BUV*11*VE00Qd6A5UCn1VV&@@@&$C15@@@@@@@@Q&@&E1nn1%@@@@CYCA%ECYnVBEYffY1Fzzcff;. `++r;=)$QBQM%VC%QVF)=r' //
// `,' `"!;="+)))"-,-";)77YYY7z+=<<<<<()7F1C7)cc7169AzFFC*eA$nnnC$Ue1nC$@V"-Y@@@@@@@@@@@@@@@@@@@SBMdSCz6ddSn1M0@@MMMM51("'` `'',,-r;((YdAYF@@@@@@@0QQQM00MQQQQQQMMM00MMMMMMM0000000MMMQQQQQQQQQQQQQQQQQQQQQQQdUeeeVVeUAS#B6d&99@@SCYYY*@@@@@@@@@@@Ae**e@@@@@$nn*A5V11V551z+cn*Yzczz7Fcr,+fz(cF55SB%$1%BQ1Y!r, ` //
// `.r). .""";rr+))))++!!=<(zzz777zz+z7YFFFn1*77Y77C&@#QE*1*eV*1CC1VV*Fn1@1'rU@@@@@@@@@@@@@@@@@09&S577%6BVeM0@@0MMMSeF(",..``..'',,-"";!()cB$Yn#@@@@@00MMQM0@WMQQQQQQMMMMMMMMMMMMQQQQQMQQMMMMMMQQQQQQQQQQQQQQQQQQQQQQQQQQAe$$U&@@UA@@@%@@@@@@@@@@@A$11VA##SA$nn1VVVVeUBA17cc7CC7cz7FnC11nnn$Q5n+zSAEee%%QnYz=' ,;-. //
// .."))..,"-,-""r;))))))))))+++fccz((()cFnn$S(zFFYYF$B@@@AVeeEeEE$*1$1C*@7'z@@@@@@@@@@@@@@@@@M%5Cz1dM0W@@@0MMMM0ee7c=r,,'..'',,,--""r!!((zVCnCAe@@@@W000MMM#@@MMQQQQMMM00000MMMMMMMMMMMMMMMMMMMMMMMW0@@@@@@@WW0MMMMMMMMMMMME$e@@d1@@@@@d&@@@@5$11$ES#BCCn1$VeeVEA5U1YzzYC$CYzYCVeEUA6Qd6QQ+!)5M5ES6&&CY+<' r7Y"` //
// ',-))-,";=;;;;;;"----"r!cfffcccz+((()+c1E5$)czYnnFFC$Ed@AEEA5ddEeA@A*5S-(@@@@@@@@@@@@@@@@dSeY6#W@@@0MQQQQA0@UAeF!,` ``.',--""-!!;"rcnCn1e1@@@@W0000MMM%W0MMMQQMMW@@@@@@@@@W0MMMMMMMM00@@@@9SSS@@d5SS%%S5UEUSd0MMMMMMMMMEE@eU@@5S@@@SVEV*VUBBe1FFCV566%d@U1Y77nVAVCFF*SQQQQQMMQQQB7<c%M5V56Md)cY<` -nU<` //
// `.,,"))+;(FFc)<=r""r++fff+ffffffcczz7FfcY1Sd1f+cz7FnnnC1VEUEEeUSUU5@dU@(rM@@@@@@@@@@@S@@BSFC#@@0MMQQSe1C5M00EEc)!;r;!=<<<=!;"-"rr"";"(F*@5Cn5e*@@@@00M0W00MM0@0MMMMMM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0W@@@@@@@@@@@@@@@@#BMMMMMME1EQ@@@@A1Fzcz$U5A*F7neBQ6%SUV1nYYCV%%e1C1EQQQQQMMMMQQMd776M%*E%MM1,r), `fS7. //
// '.` .',!)))"!cC1+(=r"-"=++++fffcc++c77Y7YFnC*5#BF(<cz7YFnn1$eeEeeeVEU%d@C;#@@@@@@@@@@@@@&eF%@@MMQUEEeVEM0M50E51B6*F7YYFn*ABB&)r!!;!r<*#dFnBCF1M*e@@@00MMM000000@@@0MMMM0W@@@@@@@@@@@@@@@@@@@@00B5UA#d5@@56B@@@@Q#@@@@@@@SEMMMMBn$@@@e*VCn7zC@$11A@@@AeVV$1C1*eBBUV$V5QQQQMMM00MQQM9UBdMMVUddM%;'"; `'7Q, //
// )))-.``',-;++--"!YFF(!;rrrr=cccc((()))+cnnnn111$U@9d*7)+7zz7Yn1$V$$$$eEB@$;C@@@@@@@@@@@@@Bn6WMM5AMMMMMM0MeV5VU1+<-..',---,,"=+(==<=<<(dUc<=cSFC%MCU@@@00MMMM000MM00W000MMMMW@@@@@@@@@@@@@@@Q5$11$UUUe$55@@@@@SEe5@@@@@@@@@S$1AMMMe5@@@@U*F7z$eE@@@@SUAAEeeU@@@@U$V5QQQQMM0@@0QQQM@@MMMMEUQdMQ7"-!< `,*C //
// -))));'..,,,'r""""r!===!!=<<(==<zz77YffczYCC1*$$$*$E%@#d1Yc+Y77Y1$$eAEEUeEr)@@@@@@@@@@@@MndMS&MMMMMMMMM*1%MV1*(c7$+zY57FddVdBBBz!;r,,*F6YBQz#WYeMAC%@@@M0@MMM00MMMMMM0000MMQQM@@@@@@@@Q5EV*C1*eAAe$*$A@@e@@EeE%@@@@@@Se11*%@0eMMM%$W@@@$CY7*@@@#EES@@QSS@@@@MSeAQQQQM0@@@@0MQQMM0WMMMdUQ#MMQC(F7)"` -QY //
// `-))))),.'--""""))+fccccff!!!<ccczzzz7FFnC*$$VeEU6%UVC1**$$1CYYYFn1VU5EAU!+@@@@@@@@@@@@MMMSMMM&BdM&e*1EMBU$nF=(&@@@0)U@5@f!SdBV+,. dnrzVCzz&1nMM*C0@@@MM@MMM000MMMMMMMM00MMMQQM@@@QEV*1*$U#@AV$$$EEeeU$1W5@@@@@QE1Cn1eBW@W@#CeMMV*0S$nn15@@@@@@@@@@@@@@MQ%%QQQMM0@@@@@MQQMMMMMMQMMAQQQMQQdV*zc+". ``!Q) //
// .``'")))))r'";7)+(;<+))++ffffccczzz77YYYYYnnCC1*VU&@@%YnFFFYYFnCCCCC*eS%de!c@@@@@@@@@@@0MMAMMMS&MMUV$eSMVe1F1z(=<!+de)VC++""!;"r,'.'`;&!''"!(F#C*MMn1@@@@MMW0MMM000MMMMMMMMMMMMMQQMM@@@@@@@@#UVA#@Be****EE@@@@de$1*VS@@@@&SE%@0Ae51FQEVeUM00W@@@@@@@0MMQQQQQMM0W@@@@@0MMQMM0MMQQQMQQQQMMQQ0eU%z++-'. .,+6( //
// `...'-))))));,,rcfYY7zzYzzcccccccczzzzzz777YYFn$e11VU@@@Q##6EFFYYYYn*V5%%V(Y@@@@@@@@@@@0%nMMEeM0%$1*$*1FC*$@Bf()+="r)c7(r,=!,''.','''.(d<'.'!fd@*50%7V@@@0MQ00MMMMMMMMMMMMMMMMMMMMMMQMM@@@@@@@@@@%5AAd@@@@@@eV$$A@@@@@SUASM000%A11C7MMMMMW@@@@@@0MMQ6QQQMM0W@@@@0006SBQMMMMMMQQMMQQMMMMQM@eQMYcF!"'`.-fe<` //
// `.',r+))))+r,,-rr!(+ffnnnFFYYYYYFcCnCCC*$VES@nc1UB@@@@@@@@e$11CC1*e#B#$Y*@@@@@@@@@@BECM51A00VnFFFFFFeS@@dn)=!;;;"-,,,'',..',--,''''.;B='.'")&WUMMC70@@@0MQM@0MMMMMMMMMMMMMMMMMMMMMMMMMM0@@@@@@@@@@@@@@%5@%@@@@@@@W00000&SU5UAUVnnMM0@@@@0MM65A%QMMM0@@@@@@0MM6AEUQMMMMMMQQMMdQMMMM0QMWeQ0FzC7=..,=z$!` ` //
// ` `..,rf++)++f=r,'',;ffccczzzz777FFnnC$$VeUEd7"fFC$$VVeEE5@AVV1nnn1#@@Vne@@@@@@@@@BFQQSCM0UCFz7YYnV0@#@@d*z<r'..''..'..''',",,,,,` ..rU<r--r)FAUMAnY@@@@MMQM@WMMMQQQQMM000MMMMMQQQMMMMMMMMMMM0@@@@@@@@@@@@@@@@@@@W000MMMMMMMM0e7EMMMMQQQ6SQQMMM0W@@@@@W0MMd5EE%QMMMMMMQQQQQQMMMMM0MM@eQ@FzFffzf=)71;' . //
// -,''..```.'-r!f++fcz=!;rrrrr;;=zzzz777Yn*$$VESS@@9Y)(()+c7C$@Q$nnnFYFn$$UVnV@@@@@@@W0n%M#1MWVCC7Y*FCMC0#&#@@Bnc=-` `.....'',,,'`` .,.(Y!rr<)7CC*$*7n@@@@MMQQ@@W0MMQQMMMMM000000MMQQQMMMMMMMQQQQMMMM0000000MMMMMMMMMMMMMMMQQMQ7CMQQQQQMMM00WW@@@@@d0MMMM%EeEQQMMMMMMQQQQQQMMMM00@MM@eQ@Yc*9@@@Cf71<"` ` " //
// r))))));-,''',"r;!(ccz7+)))<===<fzCC1FC*$VEEUeA@@@@@@@@@0M@@@%AV1nnnnnC1&%CC@@@@@@@WeVBQn6051$YFe1eMM6@#d&9@&Yf+(;,` ```...',.,r .cY=))$ez(;;<Yd5S55*n7n050MQ65UUMM65e*V5QMMMMMMM0000MMMQQQQMMMMMMMMMMMMQQQQQMQMMMQMMMMMMMMMMMEz1MMMMM0000W06S%B000MMM6UEeEQQMMMMMMMQQQQQBMMMMM00@MM@0Q07zS@@@@*d$C+;' r- //
// ,"))))))))));-----""rr;;=(fn7cfzFFYFFnnnCVE@Vz777YFnz7Y*AUSSS5eV**$*$VA@@@Une@@@@@@S55MCCd0e*n7VA*0MMddfz#dF9C=<<(<;-'..`...... ,,+z=-<AB*z(==(C&9@W60e*Y*@0@WMMQQQS000Me1nn*AQMMMMMMM000MMMQSA5dQQMMMMMMMMMM00MMMMM00MMMMMMMM1FA0MMMMBSAAAA%000M00M&EV$VBQQMMMMMMQQQQMSSMM0MMMW0@MM@@QS7F@@@@@@@MYV(- ` `` ` `f //
// .r))))))))))))++;r""""r;<(=<zzzzzz7YFnCC$US@@d6d09##96EVeAU%@S$VAEAdSS%5@@5c@@@@@BA5SMYSd0E*nF&%*MMM0V(#=$&&9;"r!==!;",''......`.' =z,)7zf)((z5&@@@0%%V*Y$@@@@MMMQQMMMM000MVCn1EQMMMMMMMM00000MMM5E$**$$VeU5%SS%QMMMSMMMBe1FY1SM5UEeEUSMMM000MM6EeVVEQQMMMMMMMMQQQQQ5UMMM0MMM0M@MM@@Q$F1@@@@@@@07EBY=;rr. . +." //
// '` `,;))))))++++++++!rr;<+!rccccz77YYYYYFCV5d@@@@@@@*Y77YFCVeAVV@#UUEV6@@@@@Q$@@@@S5A6Q7%MMM*1ndd1M0MM000-+W0@&r,""r;!r"-'........',";r!cYc)(+7*&@@@@@6eV*Y1@0@@WMMMMMQQQMM000MU1nCEQMMMQQMMMMM0000000MMBAEeV$$VV$11*$*1Cnn1EM0%%MMM000000MBAV$*$eSQQMMMMMMMMQQQQQdeVMMM00MM00M@MM@@Q*CU@@@@@@@@nn@WV9F!'`..` .` ,"`! //
// '<(!r-,',r)))))++++fcz)(()<=!!=(+77YYFn*Ed@@@6U$**AU7z7nCn*dd&#@U$U#S5SUA@@@@@5@@@%55#A1dM&MMV*n&S60MME1eW@0@0@9r.-"""""-,,''.',rz+zUc*BBdddY)VB@@@@@@@W5*1Y$@@@@@0M0MMMMMQQQMM00MM$C1V%QQQQQQQQQQMMMMMMM000000MMMM0MMMMMM00000000MMM%EV111*$EQQMMMMMMMMMMQQQQQ6EeEQMMMM0MMW0M@M0@@Qn*@@@@@@@@@A70@@@#z!;!r'` . c <" //
// .,!c7Y)<!;r-"<++++ffc)cFeAd09#9M@@QMMM#5V*CnC1$E@@@Q99Q@@@@#&UU@@SeeVEd@@@@@@@@@d56MU6QMMMM%VFE05MMMMAnn0@@WBd@=..'"""---,''!7%C7))*nc%d&C)C5#@@@@@@@@@%$CC*@@@@@@0MMMMMMMQQQQMMM0MM%eeEUBQQQQQQQQQd5UeVVeeEEAMMMMMMMMMMM%SAe$1CnnFFC*eQQMMMMMMMMMMMMQQQQQU$$VAMMMMMMMM0WMM@MM@@QCA@@@@@@@@@M7M@@@@0991(". ' (.!r! //
// ..` `.,rfcz77Y7)))777zzz+cYVEAUEAUAV*CFFYFnnCC1*$eA@@#%SQE$V5d5@@E**EVEd#@@@@@@@@dSd#e%QMMMM05CYBM%0VBMMCC@@W&(EQd!.`.,"rr;r",,',-r!+C6BEzfC$d@@@@@@@@@@@0UCnn%@@@@@0MMMMMMMMMQQQQQQMMMMMMMMMSAAEUU5AAAUA%QQQQQUeVV$$*11CC1C11*VE6QMMMMMMMMMMMMMMMQQQQQU*nYF15&MQQMMMMM00MW@MM@@Q1@@@@@@@@@@MnC@@@@@@@V!-. . "-;!!! //
// .,";;"-,''',-"<+fc(=(<(<=<<())+(+<7cz777YYY77Yn1*VeeeEA6@$YneU6BAV7C$eFeS@@@Q@@@@@M60BCSMMQMMM@Y5A6M0S1*MM10@0d<)nd9&cr'.'-r;!;r!<c6d&#BYczzzd@@@@@@@@@@@@@0ennY1W@@@@@0MMMMU&MMMMMQQQQQQQQMMMMM00000MMMMMMMMMMMMMMMMMMMMMMMMM0000000MMMMMMMMMQQQQQBe1nY7Yn$UUE6QMMMMdM0MM@@MM@WQ*@@@@@@@@@@MS7@@@@@@@Ef<. . .c!!"+ //
// `...'-=)))+++fff!;rrr;!!=<()fYn+=(=z7+)((+n11*VeEAS&@@@@@@@6B5@5EFFV11US@BEEQ@A6@@00#$%%MMdMM0@FC55MW6*nCM0@@WU!!+7nBd&d7=",''''.''....,"r=f&@@@@@@@@@@@@@@@WEnFFnEW@W@@@000MSV*VMMMMQQQQQQQQQQQQQQQMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQQQQQQQQQQQQA*nY7z7YCVUE$$AQMMMMdd0MM@@@MM@0QE@@@@@@@@@@MMCV@@@@@@@Cf(-.-` c<=;*. //
// ..,,,-,,,,-r+++++ff==<(zz+)())zY+++ffz1*VEUEEE5#@@@@@Se1V@@@@Ee%@5@MS5#QAES@QAU@@000%eSMMMMMM0VYS5SM@MV1YM0@@@7;"!ff(()YEBBEz(;-. `.'"(d@@@@@@W@@@@@@@@@@@@M1nY7FU@@@@@@W00MM$C1*UQMMQQQQQQQQQ65AAA5QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ9e1n7zcczYn$eeV1CCeQMMMM&VMMM0@@@M0@MA@@@6e5@@E@@MMSY0W@@@@@Qezf(;" `cc(=6; //
// ',,"r;<<<<<!;;r""""rr;;!+z7zz777F*$UAEeeV$$5@@&AV1CC1$e5Q@@@@VV@@@%*U@@5S@#Sn$S@00#%6SMMMMMM&9n5SVQAWMenCM0@@d=",r)(!!!;;;=)7*ABBBB5$15dM@@@@@@@@&@@@@@@@@@@@@@05C7z7YU@@W@@@W000MM*nYF*5MMM%UeeEU%d5%dQSUEeV$eA6QQQQQQQQQQQQQQQQ9U$CF7zcfffczYC$V$*CnFn1eQMMMMd$MMMM@@@@M0@MA@@@ECV@dC@@MM@YA000@@@@@59@dY"'z1<=d( //
// ..'',"=+7YY77f)+(=!;;!==<ccczzYFnCnFFnn1$U@VzzYYFCV%@@@&%@@@@@666@V*@@@@&@@BVE@W0dSBSMM&MMM6A7z*CCeM0A*nM0@@n;-''-)+!r""r"""---rr!+F5@@@@@@@@@@@@SM@@@@@@@@@@@@@@0VF7zcYeW@@@@@@W000MM1Y77n$AMMBAV$$$$e*CCCCnFFFFnFFFFFYY7zcccfff++++ffz7Yn1*11CnnFnC$UQMMMMMEndM00@@@@0M@@%%@@SEF*@UF@@0M@1n000@@@@@@@@@nr'(E==0E //
// '',-""rr;;!=<(7nCCVeeV$$*1*V**1nnYYn$ES@@#7fYn1*$V$$$*$EAAUVCC*US@@Q@@@@##@SV@@0616SMM#MMMMSYCnF1M00MV$M@@#(-,''.'(c=r"-,,,,,,,,'-r!&@@@@@@@@@@@@W*@@@@@@@@@@@@@@@0A1nYcfcnAW@@@@@WWWW00Men7zzYn1VEA5AEe$1111CCCCnCnnFFFFFFY777YYFnnnCCCCCnnnnn1$Ve5QMMMMQQ1$MM00@@@@@MM@ME@@6U1zC@*7@@0M@SYM000@@@@@@@@0@V1Q))W0` //
// ',";)))+++fc<=====<)c17f+)FFFnzz7CUS%UUA5z=YY7777Yn$SQdeCY7z7neS@@@@@@@@eESe@@06$%%MM#MMB$7cCn1S00MMM0@@6<-,,,''``;z(r-,,''''''',;(5@@W@@@@@@@@@@@eB@@@@@@@@@@@@@@@0Be$1FzcczCSW@@@W000W@@W0MUC7zccczYnC$VeVeV$$$V$$$********11CCCnFFnnC111*$eUSMMMMMMQQV1SMM00@@@@@0M00A%@@UVYz*@CY@@MM@@zMM00@@@@@@@@@@@0QYzWd. //
// `..'',-";++++++++f(!<)czf+)+z7z771CnC**E#@5Cn1*E0@@@enF77Yn*e5@@@@@@@@@@@55@@0%*%6MBdMM51CVBM000Me0BQ9),...''''.` ,c);-,,''''''',!c@@@@@@@@@@@@@@@B$0@@@@@@@@@@@@@@@@MeVAeCF7zc7CU0W@W0M000W@@W0MM%$nYzcf+ffccczz77zzzzzzzzzccccczFCC1**E55%QMMMMMQQ%VVUMMM0@@@@@@@MMM5Q0@AVncY%6Fn@@M0@WYMM00@@@@@@@@@@@MQ6UW0, ` //
// `.',,"""rr;;!zz7()+cnf=Y7YYYYYFnnn1**ed@@@@@@&Yc7z7YFn7Y$@@@@@@@@Q@@@@@@@MSV%6BBMMMM00d61+=r-,*==)` `..'',,.` .)c<r-''''''',"(&@@0@@@@@@@@@@@@W$A0@@@@@@@@@@@@@@@@0E*VSE1nFY7zzY150005EABMM0000000MMMA$CFY7zzcc++++++++fcczz7Y1VeE%MMMMQQQQQ5eV$EQMMM0@@@@@@0MMM%QMWUVnzz$@$7*@@W@@@FMM00@@@@@@@@@@@MQ@@00; . //
// ``.'',,-""r;!!==+Y*<;cfccccccz7F1eB@@6A&Ef+zz7Yc+zC#@@@@QU$*U#@@@@@@WBe5S6ddd5c(;",',rr--.n('B,''',,,,,,,'` `!f(r-'''''',,r7@@@M@@@@@@@@@W@@@*AB@@@@@@@@@@@@@@@@@@0$n$&Me1CnF777YCeS65e*111*$VE5MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQQQQ5EV$*1*e5MMMM0d@@@@@@0MQM5QQSV1nzzC@%nY5@@0@@@FMMM0@@@@@@@@@@@QM@@M0<'`',` //
// ....'',---"r;(c)<(c7777F$enf)((()fYV@@@@@#$*Yn7!7)<+7EQ@@@@d$CFF1A@@@@@@@0S$S%#6c;' .''"-)#,%%r!rr"""--,,.` `r++!-,'''',-,!B@@@M@@@@@@@@@0@@@@1M0@@@@@@@0@@@@@@@@@@@MCF16MMVCnFFY777F1VA5UV*CCnnnn1*eeAB%%QQQQQQQQQQQQdd6AUeeV$******VUABMMMM#AA@@@@@@0MQSA%AV1CFzzCd@VYC@@00@@0nM&MM@@@@@@@@@@@Q0@0M@MF)(;. //
// ,"r;;!=(<+cccc)=cfffccczYn$A6@@@@@@@#5nz)c1A*cz77C&@@@@@@U1FY(z%@@@@@@@@MSSS%&+' ` ``YY-zdzY+)=!;;r",'.``-<+=",'',,,,,c#@@@M@@@@@@@@@@0@@@V*%@@@@@@@@0@@@@@@@@@@@@5CYYEM0Me1nnnF7zz7Y1eB00MMAe$$$*$$***$VVVVVVV$VVVEeeEEEEU5BBMMMMMM00BSd@@@@@@0MQQAA5e1CCF7zFA@A1C5@MQMM@U*M6MM@@@@@@@@@@@@@@MM@@@#Uc- //
// .',,-----""rr;!<))fzFFnCFzCCnFFF+<<(+)fCUUVESA56dSAS@QEnY<<z#@@@@@@d@@MSS%*$r .' +7!<7+z66$7+<!r"-'..,;(<r-,,,---=B@@@@6@@@@@@@@@@A@@@@C*S@@@@@@@@5@@@@@@@@@@@@0%C771MMMMBe*1CnFY7z7Yn1e%0W00MM&6%555S5SS%&MdMMMMMMMMMMMMM00WWQ@@@@@@000MMQQ65AUe*CFY7zF$Ee*Ce0MdQMMM$UM%QM@@@@@@@@@@@@@@MM@@@@@C! //
// ```..',-r;!=<()zYYYzFFYYYYFn((++zF$B5%BenYYnC$nzzFUB@7+)cV@@@9E$*e@@@MS%%)fr ``-*"7zF"r)1BBAY+(!",''"=<!r"---""z&M@@@S@@@@@@@@@@0E@@@$n10@@@@@@@@5@@@@@@@0@@@@@0M1zcYUMM0MM5EeeV$1nFYzz7YnC$VEUEAABBMMMMMMMMMMMMMM%%BAUUUA&00000MMQQQQ6AEEeV$1CnY7Yn**e5EeAQ&QMMMM$QQ6QM@@@@#@@@@@@@@0M0@@@@C);, //
// .'---""rrrrr;;!czz7FC*$E6@Q5e*C*UEn;z7FCf++FVS#S@@@@@@5CFnfY#@@@&%6$!<!` `` )+'zBz,''-;)Y1C7)!-,"!<<=;r---"eB6@@@&@@@@@@@@@@@V0@@@CC$@@@@@@@@@5@@@@@@@MMW@@@@WM$YzznSMMMMMMMMMMM5Ee$1CnnFFYFYYFFnnnnC1*1111CC1$eUSMMMMMMQQQQdUe$$$VAeV*CnnY7YC1*E#@EeQQQQMMMQUQ6BQ0@@@B5@@@@@@@@0M0@@@@EC7(r,..``` //
// ..'',,-"";!=<(fCC11*$eeV$$*nY7777Y1eUF<(((cC5SAEeVEB@@@VY7fFB9@@@@M%6Y,;)'` .'` F<`<d(;"'``.,r<+f)=;;!==!r-,,!z<F@@@MW@@@@@@@@@@01@@@@115@@@@@@@@@M0@@@@@@0MMW@@@@W0A17czFeQMMMMMMMMMMMMMMMMMQAe$11C1111$VVVe6QQMMMMMQQQQQQSUV$VeU5S%AV1CCnFYFC$$EQ@UedQQQMMMM%QQ6QQ@@@@@@@@@@@@@00MW@@@@@@U+!;r-'''. //
// .,r!=(+znCCCCCC1*$**11nYzccccz7YnnnnCC1Yn7$@@@eV*C1E%*&@@eEdQ@@@@@@0B6cr`(; , 'r, n; <n"rrr"'` ``'-r;;;r;r"-,-r-"n&@@00@@@@@@@@@@@SA@@@%C*M@@@@0W@@@M%@@@@@@WMMM0@@@@@0ECYzfcY*QQMMMMMM6MMMMMMMMMMMMMMMMMMMMMMMMMMMMQQd5UeVVeU%Bd#U$1$1C11*CnC*UU%M5EQQQQMMMMQQQ6BQM@@@Q#@@@@@@@W00M@@@@@@@@Uf+);",'.. //
// ',;fffcccccz()zzzzccffccz7FnFFYzzzYF1*1$A0WAc+nFn1eeQQ@@@@@@5@@@@@@d6n"-`!< " .` "=' .F.,)(","rrr",.` `..',--,,--";1dW@00@@@@@@@@@@@@e@@@@EC$0@@@@00@@@0U0@@@@@@0MMM0@@@@@0MVFzfcc7neQQQMMMMM0MMMMMMMM00000WW@@000W@@@000SAAAAAE$1nnnn1Vee$CnC1*$VeUAQQQQMMMMQQQBBQQW@@@UB@@@@@@@0WWM@@@@@@@@MUCf=;-'.`` //
// `'',,--r<fffffffcc<=!=<)7zcf++fc7n1$V$eV1zzcCCC$enF$d5e5eC1E@@@@@@MB%!,-`,n ." ,' .;!` ` 7.r=.r'',,-r!;",''.....',,-r;)B5@@00@@@@@@@@@@@@@1@@@@*n*0@@@@M0@@@WMeW@@@@@@0MMM0@@@@@@0M$nY7cz7YCVEQQQMMM0000W00000000000000MSU$1CnC11CCC1*$eA5SA$CnC11$eQQQQQQQMMMMQQQB6QM0@@@AE@@@@@@@@@@@W@@@@@@@@@Q1c<",'.``` //
// .',r+ffff<!;;;;!=<)7zcfffc7YFC1$VV$*1*CCf7Cnn1$C11&Qe)=(CV%@@@@@@0d%(','' )! !'` `"- ,!; ` .c ,r. ...'..,r;r-,'''''',,-r=7&M9@W0@@@@@@@@@@@@@0$@@@eVF$M@@@@MMW@@@0UA@@@@@@WMMQMM0@W0W@@0MS1nYzzz7YYFnC*$eAQQQQMMMMMMMMMMMM%5e*$*$eEEUEEEeVV$1CCC1$e5QQQQQQQQMMMMQQQdB#QM@@@@e%@@@@@@@@@@S@@@@@@@@@@0617)!r,''', //
// .',-""rr;;;!=)zcfffczFcn1VeEVV$V$**1*n+fCFFcfYCVBE*(=+1V@@@@@@@@0M6z'',''`'F'rr.. -<r` `!(" `(" ' ,' `` ....,;r,'.''''',";+6#@@@@0@@@@@@@@@@@@W@e#@@5e$YeMW@@@MM0@@WW0ES@@@@@W0MQQQMM000M000MMQe1CnFYY77YYFFFFnnC1$VeU%dQQMM&&S5AUeV$$1CCCC11*$eUQQQQQ6%dQQQMMMQ6QQQQQMM@@@@Ee@@@@@@@@@@W%@@@@@@@@@@@@Q9AY(r-"""- //
// ``.'',,"r!r;!<+7C$eU5AeVVVeV$*111VE+<z7)z1#d$nc=(V#@@M@@d6#@@@MMer`,','' <=,"`.` <+,` -)<' +' ` .' `. `...'""-'..'',,"!7BQ@9@@M@@@@@@@@@@@@@@@$@@@VE*Y%MW@@@MM0WW00WMeS@@@@00MMQQ%QMM00MMMM0MMQQ5V11nFYYYYFYnnFnCCnnCCnCCC1CCCCnC11*VeU%%QQQdA%6QQMMMMMMMMMQQQQQQM0@@@@U$%@@@@@@@@@@B@@@@@@@Cn@@@@M9Un+()(!r-- //
// ``.',-r;=<)c7YnnnC*111Y7zzfFFFCnFFF@#nYF&QVF7<)1@@@@@#UV*$5@@@0MMY'.,',,'`"(-"`... ,f(, `()! !' ` ., `. `..',,,'..',-r(1d@9*@@00@@@@@@@@@@@@0@@e@@@$%nYe00@@@MMM0W0M0WM$SW@@W00MMQQ%EUQMMMMMMMMMMMM00MS$1nFY77YYYFCC1*1*$VVV$**$$$$$VEAA5AUS%MMMMMMMMMM%MQQQQ#QM@@@@@E1E0@@@@@@0Bd6@@@@@@@@@Y7@@@@QMA*17c=-,,, //
// `',"r;!=<<(()++fff+)((<()()zn1111Y7zFQ@@@@F+YBQ@@@VCFFC*VeA@@@@00M)`'''''' ,(;-.''''` <n!. !c).'< ` ', .,. `..'''''''-r)19c!$@@@M@@@@@@@@@@@@@&@@e@@0nEFz*000@@0MMM00MM0WMVUM@@W0MMMQQQUe5MMMMMMMMMMMMMM000MMMAeV*1CnFYYYYYYYYFnnCC1$E5MMM0000MMMMMMMMMQQQQQQMM@@@@@S*e@@@@@@@@BAU9@@@@@@@@@@@@@@@@@9QS*);",'.. //
// ..'',,-"r;!===!!<(cccczz7YFFY77Y1VV**nFnQ@@@@51Y77n1$$*11*VE#@@0MM;`''''''`,(=',''.'' !CY,`;Yc! ;; ` ,r `--. `....',"!FB<`(*@@@@0@@@@@@@@@@@@@@@@U@@eFVYcCW0M@@WMMM000MM0WM$$M0W00MMMQQQQQQQQMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQQQQQMMMMMM000MMMMMMMMMMQQQ#QQQQMM@@@@e1e@@@@@@@@E$eW@@@@@@@@@@@@@@@@@@@@%MC(;r,.` //
// ,";;!!!!!!=+cffffccczz7c)<77FC$Ee*1*F7n@@@$zfc7nC1CnFFn1VUQ@@A%0M#".',,,''`;c-,;;--,-' "1&!.-z1+, r; ` '"``r(r. `.'"=+(` ,zdM@@@@M@@@@@@@@@@@@W@@W0@@*Y$YcY0@M0@@0MMM00MMSMWM*1AM000MMMMQQQQQQQQQMMMMM00MMMMQMMQQMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMQQQQQQQMM0@@05CCe0@@@@@@#V1V@@@@@@@@@@@@@@@@@@@@@@@@*=",.` //
// ,=<!";+++++++ffcz(<<<(+cY$6##5V1nnzzYnQ$czcY*V1Yc)fe6@@@5$CYYC#QM#,'-""-,`rf'`',;;",',. -FMC-"fCC! "= ` `-'`.r!r,...,-rr. ,!1VeM@@@@0@@@@@@0@@@@@W@@@0@@17CFczM@MM0W@0MM000MMUM0Me1$MM00MMMMQQQQQQQQQQQQQMMMMMMM000MM0000000000M%dQQMMMMMMMMMMMMQQQQQQQMM0@@@0eC16W@@@@@@AVVA@@@@@@@@@@@@@@@@@@@@@@@@@QY;r'` //
// ";!;!==!!==(+z7FC*eABQ@@6E1zFYF7zzz711Vc)czzccYV@@@@@@*7z7Fe99%eM6.',"-,'().`..'r=!",--` ,7M@!"fn*c' .; ` ';".`','.`` ."!V$F$B@@@@0@@@@@@W@@@@@@W@@W%@@VFVC7c$@0MM0W00M0000MMASMM5$*$%MMMMMMMQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQMMMMMMQMQQQQQQQMMW@@@@0E*1E0@@@@@@U*1V0@@@@@@@@@@0M0@@@@@@@@@@@@@@nz<<)+(<;' //
// ,-r;!<((++fYCCCCCnnF7c+)(+z7YYznFFzzVE5@0U5B@@@@@@@@e(F1SMQ@e1$U@Y.''--,z<...``'"=<!-"r-`'C#@f"+zFn- -; ` r+<-'.`` `."!(Y&VFE&Q@@@@0@@@W@@0@@@@@@W@@0d@@61e*YcF0WMM0000MM00000MM5%BSe*C1VQMM0000MMMQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQMM0W@@@@MQ$*$5M@@@@@@A11e@@@@@@@@@@@@@@@@@M50@@@@@@@@@W*nCY+Y@@1+- //
// `.,-""-""r!=<((<<(7zz7YFFFYFFnn*VeUCY1*E656d@@@@@@@90@@En*59Q@=.'.--Y(`'..` ',"!==-rr''F&@z-=fF*, =. 'z#E+;r""r!)zYYne7cMA@@@@0W@@@@@0@@@@@@@@@@MB@@0$5UnzYM@0MM000MMM00000MMM6AAEV$11*e%MM0W@@@@@000MMMMMMMMMMMMMMMMMMMMMMQQQQMMMM00@@@@WMMQe**eQM0@@@@@BV11E0@@@@@@@@@@@@@@@@@@@@@W0WW@@@@WW%%%nc((!"'' //
// ``..',,-"r!=())()7zzz77YYY77Yn*V$*$n7fFYn*VVeeEAQ5eU#@@@dQSQ@@@@M"'..')n',...'`.,-r=<"";"'Y&@Y"(cnC. -- !YU&Annn1*CYFCC+(d&&@@@@%@@@0@W0@@W@@@@@@@0%@@0$5M1Y7$0WMMM000MMMM0000MMMMMSUEeV$$1CC1V5MM0@@@@@@@@@@WW00000000WWW@@@@@@@@@@@WMMQV*1*eMM0@@@@@@@See5@@@@@@@@@@@@@@@@@@@YV@@@@@W0n6@@@WU0%AU+!;,.` //
// .,,""r;;!!<zcccccczzzzz77FC$VV*1ncfFYYn1$$$$eVEUVVVU%dB@@B&@B@@@V,,.`.$<r-.,''` ',"!+r'-"rV9@e;<cc&, ," .r)CeUVF7nF7zCYczQF@@@@@A@@@0@0@@W@@@@@@@@0A@@WVUMEnYFM@0000000MMMM0000MMMMMM&UEEEEeV*1CCC1*$VEEEAS%M00000&5M00@@@@@##W%Ae$*CC1e&M0@@@@@@@@#AUAd@@@@@@@@@@@@@@@@@@@@@W*A@@@@@@0WW@BW@0$#U1z<-'``` //
// `,";f++++++++ffccccz7Yn*VEe$11z+)Y7YnCC1***$e55eVVeeeVed@S5S@@@@n',. '1!=;,.''. `,";(+--"!5@@#<=+)cF ', -(Fn77c)+f+cd1)E9B@@@@0M@@0@WW@@0@@@@@@@@@U@@@%E0M$F7V00MM0000MMMMMM0000MMMMMMMBAUAS&MM&SEV*1CnnnFYYYYFFnCVV*VV**V$**$EAQM0@@@@@@00MMB&%%d@@@@@@@@@@@@@@@@@@@0@@@@@@@@@@@@@@@@@000eQ01EEY(<"",' //
// ``'-r!!!!!!=<+z1*VUee$nC11Yzf)f77YFFFnCCCCC1UU$$VeV$**e56UUM@@@@c',. 'c"==r,.,, ,";=7=-;(&@@Q)!<+(*; , `r(f(<<)ffcz#zz@9&@@@@M0@@0@0@@0@@@@@@@@@@5@@@0eM0A17YMWMMM000MMMMMMMMM000MMMMMMMMMMMMMMMQMMMMMMM&MMMMMMMMMMMMMMMMM0@@@@@@00MMM%S6&MMW@@@@@@@@@@@@@@@@@@@@@@@00@@@@@@@@@@@@@@@@00@EAMn16FYnr-' //
// ,--""r;;!<)cYC*eee1nY77YYc))7777YYYFFnCCCCC*1n1eEV**1$UAVAE65%@@<.'` .<-!<<;'.,' 'r;=c7r;(V@@@f=<+c*) . '!)(()f+cfCd+&@#M@@@@S@@0W0@@@0@@@@@@@@@@U0@@@U50MEnzC0WMMM0000MMMMMMMMMMM0MMMMMMMMMMMMMMMMQQQQQQMMMMMMMMM00MMM0W00MMMQQQQBBBMM0W@@@@@@@@@@@@E@@@@@@@@@@@@@@@0@@@@@@@@@@@@@@0@0M@UUMn56Y!<. //
// `.'-";!=<<(())fz7c+Yzzz7777YYFC*VCFFF*Cn1*11111e@&1*UeUe@@@;.'` --,<)(r,',. ";=+E);+&@@@c(+zz5( ` ';!=<(fczM1F9d&#@@@6W@WWW@@@0@@@@@@@0@@@%M@@@BeMMQUYc*00MMMMW@W0MMMMMMMMMMMMMMMMMMMMMMMMMM00000MMMMMMMMMMMQQQQQQMMMMMMMBMM0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0@@@@@@@@@@@@@@M@WM@SU1Y)E7""` //
// .,"rr;!<))+++Yzcffcz7++fcYEEA1UC777+fCVe1CCCCV@@1CeEVVS@@1"'. ,-"(z+;,''.'!<(C%=f9@@@Y+zYef` ` ';=<)))C&cYddd#0@@6@W0@0@@W0@@@@@@@0@@@05@@WMeEMMME7z$00MMQM0@@@00MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM6d0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@M@@@@@@@@@@@@@0MW0MB$$YF!$<', //
// `'";=<(<<(<!!=(+)+fzYFC*$*CFF1$*Y7f)YFC$*11**CE@@1neA%EA@@@c--. .r!f7("'.,'!((z97)&@@@Cc7c; '` '"!()+F7<Y5EdW0@00@M@M@@@M@@@@@@@@0@@@WA0@@0BeE&QQe7z$M00MQQMW@@@@00MMMMMMMM%QMMMMMMMMMMMMMMMMMMMMMMMM5AUeEUS@@@@@@@@@@@@@@C*@@@@@@@@@@@@@@@@@@@@@@@@@@@@0M@@@@@@@@@@@@@MM0SM7FCz+"e.. //
// `.,";<)zn11$VBBddd&&##AV17f++z*CYc(fYYnCCnFnC1e@@@1neUS%6@@@UY""'` `=)Ff<-'.,"(+f##c&@@QFz(- `.'.`` .,r=<7z)*ed#W@@M@M@0@@@M@@@@@@@@@W@@@@0M@@W0SeAQMMeYYVMMMMQ%QM0@@@@@W00MMMMMMMMMMMMMMB5AAA5SS6B6%S%S60@@@@@@@@@@@@@@@@@@@cz@@@@@@@@@@@@@@@@&@@@@$$@@@@@@M0@@@@@@@@@@@@0MM$1B<YzY!!E" //
// `.,";<+c7YYY7zf++)(((()f7CFY<<YYFn1$CY7F1V&@@@nFEUS#Q@@@%@zr,'.` )1nc!'''"(zzA@U&@@9nc;. .'-,. ``..` .'")(+Y*dd#@W00@0@@@00@@@@@@@@@@@@@@@MW@@0MUU%MMMVnCe5&MMQSeAM0@@@@@@W000000M0000MMMMM000W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@n@@@@@@@@@@@@0M@@0@@@@@@@@@@MMMcVY(*cz!VY //
// .',,,---""r;!=<(()+cYCn+<<77YnnCCnYYCV%@@@@@F)nU5Q@@@@@@@c;,'..` `n&Fcr''-<77*@@#@@91fr'-!r'` ` `..''',,---,,,,'''',-"rr<;+(Cd&@@00@0@@@@0@@@@@@@@@@@@@@@@00@@WWMEUMMMMA$EdM%BMMQAeE%MMW@@@@@@WW0000MMM0000WW@@@@@@W000000MMMMMMMMMMMMM0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5*C1eMM@0@@W@@@@@@@0MdnfB<e7zSSU //
// `...'--"r;!!<)fzYc)<=<zzz7YnnnFFC$6@@@@B@SF<*A5A@@@@@A@Mz="",...` r&%Fz;--!nC$M@0@@9*+;<!` ','`` ``.',,-";;!=<((())(<<====<<<fc(=$dW@@0@0@@@@0@@@@@@@@@@@@@@@@@@0W@@@@&e6MMQMAeBMMMBMMQQQ6SSQMM0W@@@@@@@0000MMMMMMMMMMMMMMMQQQQQQQQQQQQQQQQQQQQMM0W@@@@@@@@@@@@@@@@@@@@@e7)))c*Q0W0@W@@@@@@@MMde+1cYCzBMV //
// ``.',-"r!<))(<!!<zz77YFFYYYF*S@@&EU$5@e!<VVEU@@@@@@5##F<;!;,``` `` `f&$nfr,;n#e9@@@@9$+<' .-"",....'',""rr;!!!;!!=)+fzYnn7zzcf+)cFr+d&@@W@0@@@@0@@@@@@@@@@@@@@@@@@@W0@@@@0AeMMMMMBE5MM0MMS5%QQQQQQQMMMMMM000000000MMMMMMMMMMMMQQQQQQQQQQMMMMMMMMMMQQMMM0@@@@@@@@@@@@@@@@@@EY+))c1QM@M@W@@@@@@@0Md57YF*Acd0$ //
// `.,"r;===!;=zzz7YFFY7z7n$A@@@AVE5A@@c;zVVEU@@@@@@@%@#C(!!<(r.````. rn#VY!'"f#S#@@@@#n(. "!<;"..-,.,-"r;!!!;rrr"""r;rr;;=)))+)(<!!C=r0d@@@@W@@@@0@@@@@@@@@@@@@@@W@@@@@WW@@@@MVEMMMMMMEUMM0@@00BS555555A55SQQQQQQQMQMMMMMMMQQQQQQQQQM0@@@@@@@@@@@@@@@@@@00MM0@@@@@@ncC@@@@@@@6V1*eMMM@M0W@@@@@@@#ddE1fcF#zUWe //
// .',"r;!!==(cfccczz7zzzzYCA@@@&e$Vd#5Q@Q=!1eVVA@@@@##@&%@eC(=<<(+<;-'`..")9#F),,)##9@@@@E)- '+c(;,``r;'."r;!()<;r"-,''','',,,-;!=<))=!!!z;@0@@@@@@@@@0@@@@@@@@@@@@@@@@@@@W@@@@@@@@0A*AM0MMMMQSMM0@@@@@@@@@W0000000MMMMMMMMQQQQQQQMM0@@@@@@@@@@@@@@@@@@@@@@@@@@@W000@@@Q7)7Q@@@@@@@@@@@@0M@MMW@@@@@@@dBBQ1!(nB7*0Q //
// ,r<<<!;;!f++fczz7)(()fFe@@@@@$1$A&@%d@@Y;Y$e$VQ@@@@@ddd5@VYn<!!=;;=+Yf=-,";#0nzr,(#@M@@@#c;,rc1f!,`.(+- .;!=(f+!r-'.````..''''-r!=)+<!=="=F@0@@@@W@@@W0@@@@@@@@@@@@@@@@@@@@WW@@@@@@@@0V1UM0MMMMMMMA5MM0@@@@@@@@@@@@@@W00000000@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@@00@@@@@@@@@@@@@@@@@@@@@0M@MM@@@@@@@Q6BQQn(fB&n10M //
// .'.-!+Yn1VVEd#M@@@@@@@@1Yn*E%Q@QS@@B<(nVVVA@@@@@d&deVS@Cn(rrrrr""r=+FFf="7@$Y=,f&@@@@@*(;r=zc=,`'<*< "!=)Yz<;-'`` `....,";!)+(=<<;rr&@0@@@@0@@@0W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@MV*&M0MMMMMMMdA5UEEUSB@@@@@@@@@@@@@@@#B%d9dB9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@6EMM@@@@@@@@@@@@@@@@@@@0M@MM@@@@@@@0dBBBYfF&&**0M //
// `,;=(+f$@@@@Ee1Yzcc7n$5&@@5A@@&c!Y*$1e@@@@@9*UA$*A#@A+r-.',--""r!<Y&Fff9Ec),)Q@@@@@n(;!+(;-,;)VY -<<(fFf<;-'. `..'";<+c(=()=;!c@@0@@@@0@@@W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@WW@@@@M*CUMMM%BMMMMM00MMMSEeeeVVV$VVeEES%600W@@@@@@@@@Sd@@@@@@@@&5UEE5B@@@@@@@@@@UUB0W@@@@@@@@@@@@@@WMM@M0@@@@@5Y$d66%+cBMM*VMM //
// `,""r;!f1UV*YY77n1*VE5d@Q5@@@F=7C$1*B@@@@9UUeV$U@6@@$;-. .'..''";=<7#Cz9#)c;=@@@@@9+=!)(;r!+Y&e. `!<(fzC7<",.` `.'";<)f+(()+<<f6@@@@@@@0@@@0@@@@@@@@@W@@@@@@@@@@@@@@@@@@@@@00W@@WEYYVMMMMMMM0000W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AS@@@@@@@@@@@@@@@6AUS@@@@@@@@MeeM@@@@@@@@@@@@@0MWMM@@@@@@@*6d%6B)+MM0nMMM //
// `'-r=f7F*Vee$*$V*VBB5A5@@M1)fn$$$A@@@@#%V**VU#@@@@QYr,` ..`` 'r!c%7U@fzY)&@@@@&+()<r;<71&$' ,!<fcY1c;-'` `'-r!(++)())())1d@@@@@0000@W0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@W@@M$FF*MMMMMMM00000000W@@@@@@@@@@@@@@@@5@@@@@@@@@@@@@@@@@@@@@#@@@@@@U$U@@@@@@00EE@@@@@@@@@@@@M00MM@@@@@@SdBC%%c<6MMMFMMM //
// `-!+z7nFYCES5V$SA6Be5@@#F)cF1$FA@@@@d$1C1V5B@@d@@@YF;` `..`... .-!7$C@U+&V1@@@@#f(<;!(1&EV- .;!(zz7z(r-'` .,-r!<(<<((<((YB0@0W@WW@0W@0WWW@@@@@@@@@@@@@@@@@@#6n+()((<(ceQ@@@@W@@0UF7CMMMMMMMM0000000W@@@@@@@@@@@@@6fF@@@@@@@@@@@@@@@@@@@@V@@@@@@@@@eV@@@@@@@@V0@@@@@@@@@00WMM@@@@55$CB1*B%"cMM0Mn0QM //
// 'r;!<fF1F55V%Ae$E#@@Vz<)YC7YU@@@@BCYnC*e5&@@@@@@&f$;` `..,,,' ,"=F*@@($#EM@@@#c)!!fn*nF" r((z7c+(;",'` .'-;<)<!!<<(=!z&@0@@W&B17CB0@@@@@@@@@@@@@@@@@@*f+(=;-,--";!!!(n9@@@@@@W0BC7YEMMMMMMMM0000WWWW@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$*@@@@@@@V@@@@@@@@W00MM@@@@@@Se#B$BB!=MMM0$$M&M //
// `.'")YC*nC$$VeUd6Az<!<f7FV@@@@dAYCFnC*E@@@@@@@Q@F7&"` '"-r;"- -rfn5@7z9#@@@@&Y+=)z7zc" r=)fccf(!",,'.` ',-r!<<!r;=<;--<5Cz(;",''',,,r)*@@@@@@@@@@@@@z!!!=;,` `.'-r;;""<$@@@@@@@00B1YY*MMMMMMMM0000WW000W@@@@@@@@@@@@@@@@@@@@@@@@@@5@@@@@@@@@@@@@@@@F1@@@@@@z@@@@@@@0000@@@@@@@0QQQ#B7<MMMMMYMM&M //
// .-;<()+ff+cnV*Y)!;!<+YV@@@@&%FzFYYn7*@@@@@@@Q6@SfV#, .,";!r, `"=7n@0<Q#@@@@Vc((717)- r=(fczc+=",'''` .,"rr;;rr;;;"---,.```...''''',',-r)0@@@@@@@@BY+(=r-` `.-r;;;r"!C#@@@@@@00MMUCFCeMMMMM000MM00000000W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@CY@@@@@6n@@@@@000W@@@@@@#%QQQQQdFMMMMMQnM#MA //
// .";!!<(<<(+zc((<)fn$d@@@@deYcc77FfY%@@@@@@@@eAB@FzE#' .";;". -=znQ@<E@@@@0$7f7e*+- "<+(=(cz(r,'''.` '-;;;r"-"rr-,.` `.'''''''',,,,--,-rYWW@@@#51Ff<!r,. ``.',-""r;!;;)V9@@@@@@0MMMM51nC$E%QMMM00MMMM00W00000000W@@@@@@@@@W@@@@@@@@@@@@@@@@@@@@@@@@nY0@@@@CM@@0MM0@@@@@@@d%QQQQQQQQQMMMM1Q#QM$ //
// `,"r--r;!(f7Yn*A5Q@@@@@@#V7f(f7c7Cd@@@@@@@@@$1Ed@@cCE&' `'";!".`;c*&@A+@@@@#%FF51)" .;)f<;;<cz(r'.'''.` .'";rr---"-.` `'','.` `.',--"-,,-rF@@@dVF7c+<=r-''..'..`.',-";;!=Cd&@@@@@@WMMMMMQ$nn1$VeUQMM00MM0000WWW0000MMMM000@@@@@@@@@@@@@@@@@@@@@W0000M@7n@@@@MV@MM0@@@@@@@@@MQQQQQQQQQMMMMMnQQMQ* //
// `...```'-r(fzYnnUS6Q@@@@@5CFYYnS&9@@@@@@@@@Qn*E@@@@f7&Q#` ``.,"==-.,)eU@@Y@@@@M#5Ez!- '!++!"r!)+)!-'',''..` `,"r""""-'` `.',,,'''. .',--""-,,"=&@9dFc+)(!;"-,,''''````.',-"r!Y5VQ@@@@@@@0MMMMMMVnFC*$$$V6MMMMMMMM00WW@WWW000000MMMMMMMM0M000MMMMMMMM0W@@@@@f$@@@0E00@@000@@@@@MMQQQQQQQQMMMM01eQQ&n% //
// .'r=!+c<rr(F#@@	#&&#M@@@@@@@@@@@9Un*5@@@@@F)V&@7 `..,"=)!-.r5%V@QM@@@@9#+r, ,!(=r-";=<+);,..'''.` `,-rrrr-.` `.',,'''',,,''....'',-------,"<&@dCz)<!r"--,,,,''''...'',-";+$Bd@@@@@@@@00MMM00MenYFC1*1*VdQMMMMM000000WWW@@@@@@WW000000000WW0000@@@@@@@@@nYM@@@&0@0000@@@@MMQQQQQQQQMMMMM0MYQAMCCe //
// ``.-`";,rf50@@@@@@@@@@@@@@@@@@@@@@@%#@@@@@@@<zE9#- .,,-!cz!-'+Qn@@@@@@@Mcr' "<(!,'"r;!<)(r'``.''.` .,r!;-.` `.'''''''''..'',,,,,,,-,,,,,,,,-"+@MBY)=;"-,,,,,,,,''''''',"r!c5d&9@@@@WWW@00000000M5*FYYFCC11VUQMMMMM00000M0000W@@@@@@@@@@@@@WWWWWWW@@@@@@@0<U@0@60W000@@@WMQQQQQ5QQQMMMMM0M7eUQ5Y$' //
// ,<z1VE#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7(e&9F `',";fCf!,"#@A@@@@@@C=, r)f!'.,"r;!<<<"' `...``.-"",.``.'''''''''''..`````.',,,,,,,,,,,,-";U@#B7<;"-,,,,,,,,,',',,-";=+*B&9Q@@@@WWWW@@0M0000MMMMe1nFFFnnCC1$eBMMMM000000MMM00000000MMMMMM000000@@@W00@;1@W@MMMMW@@0MQdQQQSeSQMMMMMMMMCCVV5FC! //
// .!=<)FA90@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;1A9&= `'";+1ef=-F@9@@@@@&)- `;++;,''-";!!<)<!,.'.``'-"'.`..'''.'''''''''''.. `....''',,,-"r;(Q@#Bc!"-,,,,,,,,,,,,-r;!(z*B&&#@@@@@00WWW@@W00000MMBBM%E$CnnFFFFFnn1$e5MMMMMMMMMMMMMMMMMMMMMMMMM000000W@0W;U@WM5%M00&BS5A5BQBESQMMMQMMMMEF$$6%nV.' //
// `,")A##&#Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@)<&&05- `.` `,;)V#Uc!(@@@@@@#+"`'(7c!,.'"rr;==!!<!;r,'-r". .''..`...'''''''''....`` `.''',,-"rrr;B@@&$(;-,,,,,,,,,',,r;;=f*Bd&&9@@@@@0000M00W@W00MMMMMM&SSAV$1CnFnFFYYYFnCC1$VeeEEEEEUASBMMMMMM00MMM00000W0!0MS$AA6%5AEeEAQQSUAMMMMQMMQQdFC1Q%Vn+ ! //
// ."r<En7c7A#%V1$S@@@@@@@@@@@@@@@@@@@@@SA;*S##f .-"'. `,(F##Cf+Q@@@@M*;';z17<"-,";;;=<<<(=;;;!=r. `...` ``...''''''''''''''........''',--"""r-!+@@dVc!"-,,,,,,,,,,,""r!+1Bdd&M@@@@@000MMMMMM0000MMMMMMMMM6AUeV*1CnnFFFFFnnCC111*$VVEU5&MMMMMMMMMMMM00@@@<cd11EUAUEeeeUQQMUE5MMMQQQQQQQFFCM%QY6',; //
// .',-,,";=z1nfr.,(%@@@@@@@@@@@@@@@@@@@@VBc)&5#$" `,;=!;-.`')E9&1Y&@@@@&(';Fn7+<=;;<((((((+f)+f);.``...`````...''''',''''''''''''''''''''',--"""-!="@@dVY<r-,,,,,,,,,,,-,-!)YBBd&@@@@@@0000MMMMMMMMMMMMMMMMMMMMMMM&5EV*1CnnnCCC11***$$$$VeEABMMMMMMMMMMWWMMn"1$*UUeeVVeA%QM6EEQQMMMQQQQQSFY1MSSFCf`=. //
// ``..'-";;,` 'f9@@@@@@@@@@@@@@@@@@@@dEU)V#&#+` ` '"<+c)=--z#9#&Q@@@M)r!fYF7zc)<)fcf+ffcnEVfr.``''.` ``.''''',,,,,,,,,,''''''''''''''',,,--"<),r@@&A1)!"-,,,,,,,,,,-,,r(7BBd&@@@@@@WWW000000MMQQMMMMMMMMMMMMMMMMMMM6SEe$$**$VeEeEA5S%%BMdMMMMMMEV$V$117"nUVAVVV$$V6MMAeVUQQMMMQQQQQVYF$QSFCzB'rr` //
// ````.'.` `;(79@@@@@@@@@@@@@@@@@@@@@@ec9&&E" ``.. .,;(zn*(<&Q@@@@@@7<+FYYVeeeE&#Q@@Q#Q@&+".`.''.`` `.''',,,,-----,,,,'''''''''''''''''',,r+<";-#@#BEz!r"-,,,,,,,,,"-,"<nBBB&@@@@@@W000000000MMMMSEEAQMMMMMMMMMMQQQQQQQMMMMMMMMMMMMM%%S%M&%Ae*CC1CC117"nU*$1*$$EMMMSEVeAQMMMQQQQQQ1Fn&M5f*zd<'(.' //
// `,"(Q@@@@@@@@@@@@@@@@@@@@@@@*VQ5&(` ....''` 'r=+C&7E@@@@@@&71E&9Q@QM@@@@@#nFVF!'``.'..`` ``..'',,,--";;!==;",,''''''''''....'''''!f;"rf,e@&dB*<;"-,,,,,,,,-"r"r)BBEB&@@@@@@@@W0MMMMMMMMMMMMMUV$$V$eEEUASQQQQQQQMMMMMMMMMMMMSV$*CCCnnC11**$$C=fY1nC1*$EMMMUEEVeQMMMMAQQQQVCCCMMdE*n%6.),.' //
// `"A@@@@@@@@@@@@@@@@@@@@@@@@@$##5z, `''''.,-. ';(C&U@@@@@@&&####5Vnc+)(;!=)(". `.'..`` `..'',--"r;=)cF$U51)"-,'''''''........''<<--r-(!f@&dB6+!r",,',,,,,-"rr;7BAVB#@@@@@@W@@W0MM%5S%5S&MMMMMMMMSUe$*CnnnnnnnnCC1C1CCCCnnFFYFFnC*VVeV$$1Fzfcn1C*$EAMM%EeEVV%MMMMS6QQQ%CCCFdMdE**FM'(=''` //
// ,=cz#S@@@@@@@@@@@@@@@@@@@@@@@#Q#V!` ...'``'-r,.` `-=e0@@@@@@#eneee$1CFYzzn1+"` `....`` `..',,-"r;=(z1EBdddddB=,,''''''.........'(!,"==!;z(@QdB6c=;",,',,,,-""rr!YE$$B#@@@@@W0W@W000MMSEVV*$VeSMMMMMMMMMMUeeVV$1CCCCCCnCCC1*$$VeE5Ae$CnFY7zzY1$$*VVeEAEeeEee%MMMMMQQQQQ$CCY<BMM$$ScM;!<,".` //
// 'r,` 7@@@@@@@@@@@@@@@@@@@@@@@@QQ&+,` .'.'` `,"(!-' ,)@@@@@@QQM@@@@@@@@@0&),` `...`` `.'',,-"r;<f7*eBBBBBBd&d),,,'''''.......'.!=.rc<<=!(Fd@ddBF<!r-,',,,--"rrr<nnnEd#@@@@@W0000W0000MM6E*CFYYF1VU66MMMMM6&MMMMMMM&MBS5AUeeV*11CCnnnC1CC1*$V*1*$eeVeVeeeeMMMMMMMQQQQ5CnF;(dM$1U57#!;<.,` ` //
// =##Q@@@@@@@@@@@@@@@@@@@@@@@91;.` `,,''` ,!Cc!r' `;%@@@@@@@@@@@0#55&V(, `...`` ``.',,--"r!<fY1$eUUEUBBBd##z,,,''''''........+,')f;!;!!+&@&dde+=r-,'',,-"rrr;+7cY6d#@@@@@@@W000000000MMSEV1n7zz7YYFFnnCCC11CCCCCnnnnFnnnnCC11$VeUUAEV*11C1*VVVeE5E$$UM00MMMMQQQQ6$CF!(BM$nV%zcBr";.'```` //
// `"=.,(!7@@@@@@@@@@@@@@@@@@@@@#z,. -"'..` ,(eA+;, ,7@@@@@@M#&V*nVU7=,.`....``` ``.',,-""r!<+zF1CCnFn*e5Bdd9M1",,'''''....',,'.),'!Y-,rr<<$@9&dBz<;-,'',-"rr;;=)++F6d9@@@@@@@@@00000000MMMAV$1CCnnFYYFFnCCCCCCCCnFnC1C*11*VVeeV$$1CnnnnC*$VeeVVee$*V&000MMMMQQQQ%$1n=<6M%n*&%+z%r;r`. `.. //
// ')@@@@@@@@@@@@@@@@@@@@@0&).. .!;,'..` ,<#A(;.`"z@@@@@@M#e59Ecr.``..````` ``.'',-"r;!<+zFC1FY7zzYCe5Bd&Q@B",,'''''...`.'''`<r',((,,,=c+@@#&dY(!",',,-"r;!!<((+CB&0@@@@@@@@@@W000000000MM%$CC*V$111**VeVVVeVeV$$$11CCnnFFFFYYFFnCC1111C1$$*11$50000MMMMQQQQA*11F=FMQC1M%n=cc-<" ` ``.. //
// ,. ` '+7VE@@@@@@@@@@@@@@@@@@@#&=.` ;(=;"-,'` -(5f!r!7@@@@@@@@@@@nr'`....```` ``.',,-"r;!<+zn1CY7ccc77Yn$UBd&Q@B",''''''...`''...'<-''!(<=(<(#@M#dC)!",',,-"r;!!=<(fVB&@@@@@@@@@@@WW000000000000MMM5V*1*$Ve$*CCnnnnnnFFnnnnFFYYFnnCCCCCnFFFnC1$EB0000MMMMQQQMQU*11nfnMMCCMB%+;+=,!-`` .`` ` //
// r;;` . ` `` `' ``'";, 7@@@@@@@@@@@@@@@@@@@#U=' '))<<<<;", ';Yz=+A@@@@@@@@@@F".....`````````..',-"r;!=)cF1nz+++fcz7YF$eUBd#M@d",'','''....`''''`'=;-',"""<nV@@9d1+=r,'',-"r!!!!=<z6B#@@@@@@@W@@WW@@@WW000MMMM00000MMMMSEV*1***11CCCC111CnnCCCCnFFFFFnn1$E5M00W00MMMMQQQMMQV****15QQ1nM06V<=+;r!",``.`.'.`` //
// '`'.``.``.. `-.``-+Q@@@@@@@@@@@@@@@@@Qn("';c+++=r", `'";777#@@@@@@@@@#!'''....```````..',,"r;!=(f7117+((()+++fcY1eBBd#@@d",',,,'''........'`.r====<fVF<@@Md*f<r,,,,-";!!!!!<Y6d9@@@@@@@W0W00000@@@@WW00000MMMM00000MMMSS%6SAeV$*$1CCnnnnnnC1$eU%M000000MMMMMMQMMMM5$**Cn$QQQCn60#6c!((";!"r``...''.`. //
// `,`...` `` ' ')cV@@@@M@@@@@@@@@@@@7+!-"))!-''` .-"r!+YYn@@@@##Q@@e-''.....`````...',,-";!=(c7C1Ff(<=<<((()+c7nVBBd#@@#",',,,''''...``'.`.-'.";=<<<=!&@@d$c<;-,,,-";!!!;;<F6d9@@@@@@@@@WW00MMMMMM0W@@@@@@W000000000MMM0000MM%5A5SBMMMMMMMMMMMMMMMMMM&MMMMMMMMMe$$*11eQA$C1M00dY<!(;,r"-r'.'...'.`.` //
// -"..''.'`` ,===f@*<)M@@@@@@@@@@@@c+=""r,``.`.r)+)((fYn)7@@@&%55@&",''..........''',-"r;=(fYnCFc)<=!===<<()+fz1UBdd#@@Q",,,,,''''......'.''''r,,!-+f!E@@&Ez(;-,,,-";!!!;!)n6&Q@@@@@@@@@@@WWW0W000M0MMMMM000@@@@@W0000000000MMMMMMMMMM65UUAS&MMMMMMMMMMMM0MMA$*$$$edQennVM0W0*(=))"'-,,r,.'...'',-". //
// -!,.;++;` ..',,-rY), `7@@@@@@@@@@@@Q((;-'``.,;)7Yzcccz7Yzc@@@#n17e@7r,''''.....''',,-"r;!<+7FFYc)<=!!!!==<<()+c7*Bdd&#@@@r,,,,,,''''.,,'-,``'.,","<r;F<7@@&67(;-,,,-r;!!!;!+1B#@@@@@@@WWW@@WWW@@@@@W@00MMMMMMMMMMMMMMMMMMMMMMMMM%AEeVeABMMMMMMMMMMMMM0000M5$*$$VEdQ51n160@W0%+=)+!,.--,""''''''";;"-, //
// '"`!++=-,'.,=="r<- F@@@@@@@@@@@@@c=;,..'"<zCFzzYYYzc+zf@@@Q1f+=U@cr-,'''''''',,,--"r!=(f7Y7c)<=!!!;!!====<)+cY$Bdd&Q@@@;,,',,,,','"-,""``.-`'',,r"r=(c@@&Bz)!-,',-";!!;;<ced#@@@@@@@@@@@@@@@@@@@@@@@W00MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM0000WW00MU$*$E5S56A$C15MW@@0dF+c7(;,'rr'"r,,'..,;(!,.'` //
// ,'``'",',.`"7z. .c7&9&9@@@@@@@@%!r,.';fCV1nFnYc)<<;=)Q@@@&Ff<rQ@+;-,,'''''',,-"rr;=<)czzc+<=!;;;;;!====<()+cFVBdd#@@@@),-',,,,,'rr-r!'`...'..;",<!+(c@@#B7)!",',,";;;;!(n6&@@@@@@@@@@@@W0@@@@@@@@@@@@W000000MMMMMMMMMMMMMMMMMMMMMMMM00W@@@@@000M%V$VAQQQQ5eV$VM0W@@W0B$CnYf=!r,!!'"=-,,'.-<)r'''` //
// ''.`."".``.'' 'rr!=!79#Q@@@@@$;-,.-cE5SEVFc<;rrr-"!5@@@MUF+!-@@c="-,,,,,,,--"r!!<(+czc+(=!;rrrr;!!!!==<)fc71UBdd#M@@@V,",,,,,,,<'="!.`.'`.,',!,(=)F+@@QBF+=",,,,";;;;=f$B#@@@@@@@@@@@@@0M00@@@@@@@@@@@@@@@@@W00000000000WW@@@@@@@@@@W000MMM5EeE6QQMQAV**V%M0W@@@@WB1C7+(<<!r,!!."<r,,,'-<<-'..` //
// `''-'`.'.` !z(,,,;=(#@@@@6c-,,.-YAS&&F)!"-"r-'"=e@@@@&Cz(;"@@7(r-,,,,,,--"r;=<(+cf+(=!;rrr"rrr;;!!=<)fc7CeBBdd&@@@@@"r,,,,,';;,<,<'..'...,,rrrc<17&@@d1c(;-,,-"r;;;<76&@@@@@@@@@@W00W@@0MMM0W@@@@@@@@@@@@@@@@@@@@@@@@@@@WWW00000MMMM&5UEUQQQMMQ$Cn*UM0W@@WW@@@&%Cz<!=+(!",r<,!);-,'.;)!--','`` //
// ` ,r, `. `'!Yz",,<Q@#nYz;.''.'Y@@&7="--"r"..r=7@@@@@&1f<r-@@1+!r-,,,,--"r;=<()+)(<!!rr""""rrr;!!=<)fc7neBBBdd9@@@@@("-,,,-,(--='=-.''..'''r=r(cYFd@@d*z+=",,-"r;;=+*B#@@@@@@@@@@@0MMM0@@0MMMMMM00W@@@@@@@WWW00000000000000MMMMMS5AASdQQQQE$1C*EM0W@@@W000@@#Vf<=;!(<;;;r=(=)("-,'';z="-'",'-` //
// `` `.,'` `.`.''-<r=#9ccc!-`',,,r+c(r,,---'``.r!f9@@@@9ACc<r-@@ec<!r-----"r;!=<(((<=!;rr"--"""r;;!=<)+zY1e5B5Bd#@@@@@@9rr,,-,;!-"<,"<.'..`',",r=;+nYB@@d$7f<;-,-"r;!<76d0@@@@@0@@@@@@00MMMM0000MMMMMMMMMMM000000000000MMMMMMQQQQdQQQQQ5Ee$**V5MM0@@@@@@0⍫<;rr<(<;"r",;)()<"--,,=7<"''-'.r- //
// ` `` `',` ` .,,` -#&;-C0-`";;r"-,,,--,,'..'";(n#@@@@@#*Y)!r-@@dY+<;r""""r;;!!=<==!!;r""---"""rr;!=(fzYF1$eEBd#@@@@@@@@7"",,"!"-!;!"<".'.``,,;r;<=F16@@&BFc)!"--"r!=+*B&@@@@@@0W@@@@@@@W0MMQQMMMMMMMMMMMMMMMMMMMMMMMMQQQQQQQQQQQQQdS5AS6QMM0W@@@@@@@@QBB##&*<<=<(+)!---,-)ccz<r-,-"<+!r--"'.<=`` //
// .` `` ` `<C"```..` --;(z+'`"rr;!;rr""-,'..'"!c&Q#9@@@@Q&Y+(;;,&@#U7+=;rrr;;;;!!!;;;;;r"""-"""rr;;=<)fc7Yn1*UBdM@@@@@@@@@@=r""r"""!<=rr).'..``"'<;;)+nA@@#BCc+=r--r;<(76d9@@@@@@0M@@@@@@@@@@W0MMMQQQQQQQMMMMQQQQQQQQQQQQQQQQQQQQQQQQQMMM00@@@@@@@@@@@d%B##9dz)!=!)c(r"",,=11zf=",-r!!;""-rr.')).`. //
// '' `.` ` r!r;"' "r-,!+` ,,,,-""'...''-;=fV9#n(<C@@@0#Un+=rr-c@@BeY+=;r;;!!!!;;rrrrrr""""rrr;!!<()fz7YFF*5Ad@@@@@@@@@@@@M!="-r;;(!,=,+,.'`.`."')"(z7V@@QdVFz(!r"r!(+1B&@@@@@@@@0M@@@@@@@@@@@@@@00MMMMMQQQQQQQQQQQQQQQQQQQQQQMMMM00W@@@@@@@@@@@@MQ#d)fn&Uz=!<<+7z!,--,rcYc)!"-"r!!;"---r''(Uz-.`` //
// .-` .,` `` `-;;-'',";;(; `...',,,-"r=)+cz7c);,..;&@@@9#EY+!r"")@@dBe7(!;;;!!!;;rrrrrrr"rrrr;;=<()+cz7YYY*BEd@@@@@@@@@@@@@@d!=!;"(=;r<,)r.'` '`-,rr!ccn@@M&B$Ff(!r;=)z6d#@@@@@@@@@@M0@@@@@@@@@@@@@@@@@@WW000000000000000000W@@@@@@@@@@@@@@@@@@@9&7fz7)=;r-"r<++n+;"--;+$*C1z7<=<<;"-,-;;.!##(,'..`` //
// ,` `--` `,' `````'-rr;=!);r .,;!=(<=!r"r"r"''.``.,)@@@@#5nf<r""r(@@@&B1c<!!!!!;;;rrrrrrr;;;;!==()+fz7YYYCUBB9@@@@@@@Q9##9@@@@7<c,=!!<;<,c-''. `''""rr)fF9@@#B6Cz+<!!<+nB&Q@@@@@@@@@@@MM0W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&V7+((!"'`'";)cz<---"=Y&@@@5@@5@n<<-,;("`c@F-',,'''. //
// ` ``` 'r.` '"' ```.'--","7U7` `...````.'-;!!;""-;=!;!(5@@@M&*f<;""-;)@@@#&B$z<==!!;;rrrrrrr;;!=<()++fcz7YF1$BBd@@@@@@@@Q##&&&#@@@@Cz";<;!<-!),,,.` .'""""<fnd@@MdB$Ff(<=)c*B#@@@@@W@@@@@@@@0MM0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#$U&QQ&d&C<'.-;!!)Y+!-""!zA*Y@ddEe@@Q#V))<;..9@)'--,',,', //
// `'. `-,.` "=" ````.,"!f!'` '"=)c1&#&&&#@@@@&nc(;",,-;)@@@M#&Bez)(<=!;;;;;;;;!!<<(+czz77YF1$Bdd9@@@@QQM9###&&&&&#M@@@*+;r;;r!+"--r.``.."---;)$6@@@&BACc)()cn6d9@@@@@@0@@@@@@@@@0MMMM0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@dz<=c$d&c-"=<(((f="-,!)1n+rrF@@@@@@@@F!, `<@@r'---,,-,,, //
// ` .,-,``'''.``` '=f!' `` .' .", '<1#@@@@@@@@&Y(!r-'',"(@@@@99&dBnf)(<==!!=====<)+fzYn11*VABd&#@@@@0###&&&&&&&&&&&#Q@@@1z(!!(+;""),'```.,,,""FCn@@@9dB$Ff+fYEB&0@@@@@@@00@@@@@@@@@@@@0MMM00000W@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@QA+ff++cc=!)c(;!fnf;-r(7$c(!;<(S@@@Q11f. .)@@).',',-,--,,, //
// `. ';!'``',,','```` .;)+!` `` `,-!f(=()(<=". '-)&@@@@@@@QEz<;",',,;@M@@@@0#&BV7f+(<=<<<())+czY1$VVUBBd#M@@@@@#&&&&&&&ddddd&&&&&#Q@@Cf)<<;;rY=-'.. ..',,(C)7@@@@&d6177F*6B&@@@@@@@@@0M0@@@@@@@@@@@@@@@@000MM0MM0M00000WWW00Q#9W@@@@@@@@@@@@ddFf<!=)c="!<)<+nCQU1@Q##dc<;"";=nF("rr,.'c@0(..'',,'..,-,'' //
// ``.'.` ,;-...''.'''',,. .r(;'` .' `'.'r(Yd&&$<' '-)#@@@@@@9&Vz+=",'-'<@&C@@@@@@#dB$nzf))++fc7F1$E6BBdd&9@@@@@@@9&&ddddddddddd&&&&&&Q@@@*)(!<!+F-"--'```..;c!f)@@@@9&B$nYC6B&@@@@@@@@@@@@000@@@@@@@@@@@@@@@@@@@@@@@@00000000W@@@@@W#d&@@@@@VY&M9YfFY+=-r<r-rc$<-7@@@@Qcr,-!)FS*Fz;''''!&Q<..',',-rr",,,'', //
// .',,-'''.`.,--rrr-''..,-;;-. .--,'`` `';Y9@$!-";)#@@@@@#&eY+!-,'`,,$@$nF@@@@@@@#&BVCY77YFC1$ABBBd&Q@@@@@@@@@@@#&dB55BBBBddd&&&#QQ#0@@@BC7)!Y);rr"'. `,("!(<&@@@M&B61CE6dQ@@@@@@@@@@@@@@@W0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@MM@@@@@@@@MM*(r";z7f))<=!="rfnz;"=&@@1=-!((Q@@@@dY1f,,rz#n"',,,,,r;!=r,'',,' //
// .''..',-'`.r(CEec=r-,'.,"rr". .` ``` .;cQ#<=(c&@@@9#&A1z;','`',=@@5Ee5@@@@@@@@9dBBBAA6BBBddd#@@@@@@@@@@@@@@@#dBB5UBBddd&##9M@Q@@@@@@BFz!F(;;;r,.` `","r<<U@@@0#dBV16B&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0#@@@@@7r."<!rrr!=!;!zdF=r=UQ&+zf7n%&V@Sc7BCS&Y(+AA<-""""''--r",'',,''' //
// ` ```-n*F$CU@(<7zr.```..,,.. ``` ```.'.`.r(0&=1E@@@99#dVz;,,. ..-@@&A1enc@@@@@@@@@#&&d&	Q@@@@@@@@@@@@@@@@@@@@#dBBBdd&&#M@@@@@@@@@@@@@B1fYz;;!;-,``..'-"!(f@@@@#dBBeBdQ@@@@@@@@@@@@@@@@@@@@@@@@W0000000000W@@@@@@@@@@@@@@@@@@@@@@dB#@0#<'';<==;"!fUn<"<C&e+==9@@@@F'c@@5@@@@@9F<rr!r""-r!r-,,--,,,''' //
// ` -n11@@@@;-r!rr"-,''''-;!z7". ',-,.`.'',. `!7@<7@@@@@Q&Uz;-,` '..9@9U*7n&Y<@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9###9M@@@@@@@@@@@@@@@@@BC7n=!=;;-.`.`.,"r<<9@@@#&dBB&9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9cC0@@&e$n=!!;(==+V&F(!+d&7!r!(c199Uz+;=1@@@@@@f-',-,'',;<;"-,-"--,,,,,' //
// ,r-=<ce@@#!",-r",'''-;<)c7z7eU7<. `-=)=",-"'` '+&7A@@@@@@#C(!"` ,..#@@dVFFne&n(Y@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@d1CC;!<!r''..`'-"!=$@@@0#&d&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1"<++c+z);<f%1+dM&f+*dd+;r=cn*f<!""-";;;<7)r!!.....'-r!"``.',-------,-, //
// `.`.````',,--,r<<!=;rr;r,'.``....'',,";<f$d9#, .r)1f<=".`.rnV@@@@@@0#V+-.., .Q@@9dUCn1$S&#Cz9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&V1F!===-'....,""=)@@@@M#&&#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&##@@@d);;r;;!+z<!(Y@Q7A@0&f<r"<cc(!",''-r;;rr-. ``',";!<!,` `.',,-------""" //
// `',""-""--";<=;r;!!;",'...',''''''',";<)fnB9@f `-=&Ec)!,.r)#@@@@@Q&n+;--. "@@@@#&dEd	Q@@@&&Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#ECF(=!=-'.'''-"!=&@@@@9&#Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@U#dr+#d&Cff+)!"-.,)7Yec+@@dQ@V=(zFYz(!""rr;;"'..``.-"r(f7c)!;,```''',,,--""""r;r" //
// -",,,-rr;)(r--"!!;-''.`` ""',!;;--r==!==(6B#@Y` ."(M#&7!"z@@@@@@M&7+)<,`-&@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@QUYC+<;!-'.',-";=7@@@@Q#9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@V=c!"+(<<=;!<(<()(Yn7Y1cn@@7$@&VVc=","rr"--,'''-"!<<<)+!",'..`',,',,'',-""-";;;!= //
// '"";!;;!;",,r!r'` '",'-<$&5c)!"",,'...,r(1dd@@+. -(V@&$E#@@@QQMM&Cc(r'"e@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9VFf<+!!r,'',""=(9@@@@QQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q@@@@@);;;""r<Yn1&&&Cd&VeC++c(Y@@CE+;,'''-""-,,,,,";!=<+c)r,,-'..',,,,"rrr;;;;!=(+c7Cd //
// ,"-,,,'..,;"'` ' .;F&9Q@&z!,',,.` `'-r<ce9@@&z`-fd@#Q@@@9#d$cf)(=!(#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&nC(;f<!=;",,r;(C@@@@M0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@U&&&*&d+)<"-;<f@@@@@@M17f<==)F770@Y;=!(fzccf)++ccfz*S&&U7!-,"r,'',,-=fYn*nnnnFFF*$nz))f //
// ;!+7-..,;"` 'z+B@@@@@&<-.-, .,,'.',-r!<+1d@@@@@@&#M@09#&&dE1FzzzF&0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B+n+;+(!;;;!r;(zQ@@@Q@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&eQ)!;=!<71+)+=)+%@@@@@@@1czFed&e$cn0$(c+)<!;;;=)cYz+<((=;"r(Y1nFYn7cc7nc)=;""-"r;!=!;rrrr //
// =ce&V*#@d,,;c&@@@@@@@@@d,`.;F)cCd&&##9Q0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F=YY!<=;;r"=;;fB@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@97@@;();;"!<+cCEznCcz0@@@@@@1$$Y+=!r)f)Wc'``'-;)+zf(!""r!+zn1Ee7);"-,.``.''''..''-"r;;;!=(((< //
// (c()c+cE&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#c<)c)==!(-'!r;+&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0@@@@z,=);(r;<)zF$UC)7YF$V&0@0#f++f+c77CF66Wz!Y&QMQ#&5VU&Q@M9nf(!r"""","--;)FU&&$zzzzzz7zz77ffzzc //
// .,-rr!((n1z!<!<)cFFn*Edd&&&&###M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@MM@@@@@@@@@@@@@@@@@@@@@@@@M&@@&YzdQ@@@@@@@@@@@@@@@@@M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5f)=<(=;";;+<!<c&Q@@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@@Q@@@@F-.,r<+(C&&#&&##MQ9#&dd&&&#Q@@#deUF&00ec&nFfzC&Q@@@@@@Q9Q@@@@@@@@@QM@@&Y+!!<)fc7zzcc+))(()f //
// ``.(z11(!;<<==(+zFCVVeVUU*A#9M0QMM@@Q9999##&eCnnFn1$VUAEe$$VES&Q@@Q9###999Q000MMQ9#&&&dEnYY7c=;c#&@@@@@@@@@@@@@@@@@M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@zf+!r=fc=;","r<cS@@@@@@@@@@@@@@@@@@@@@@@@@@@&d9@@@@@0&d@@@0+<+c#&&#Ued&&Q@@Q#99#&&&d$F1dS#YB@0M)fnA9QQ#&F+!!(+cYeddCz+))fFF$&&C(<<(++)+fcczz77zz7zc+ //
// ``""'.''rr"r"-"rr;;!<(+fz7C$CYnYFnn1Veed&&&&ddSV*1$Ud&&#QM@@@@@@@@@@@@@@@@@@@@@0QM9d1z)((<"-)e#@0#@@@@@@@@@@@@@*+e@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5cfzf<' .'-;=(C#@@@@@@@@@@@@0M@@@@@@@@@@@Q&dVYCY&@@#&&&A#@&EF1&&&Sd#9@@@@@@@@@@Q###99Q0#Bd@0#z9&AY<;""r!)FC$SdEV$Czzn*UAdEY)<<<!;r"""-"""r;r;rr;rr //
// ``````` `.',-""rrrr!=<()()()+++fzY$eddd&###Q0MMQQQ999##&dEV$Ed&&###9QMQ##9QMQ#&VzFeV!"z&&ddc$z!E$S#Vd@@@*''<6@@@&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@9F$+" `.'''";!(Y&9@@@@@@@@@@@@#&@@@@@#&@0&7cC$+="rFM@#Q@@@@@9&d	&Y))f7FY77n$d&&&*zz7CzU&#@9++f+c++c71dSeYf)(=;rr!<(<!;!"'..````..''',,,--,,,,,''' //
// -. ` ```.,"rr!=<<=<<())))+z7YnCC*VU&AVUeS&&&&#&&&&&###d$Fzf+fz7cc7FFFFYFn$Ud7<7VddUYz1())<7czC('` `!1QF+Y$#@@@@@@@@@@@@@@@@@@@@@@@@@@@9@@@@@@@@@@@@$+r..'..,;<+7$&9@@@@@@Q@@@@@@@E<c@@@&$=z#z)!((<+=r<zU##&#d&&&&d$1YYCC$ddeCCYz7CVE$$Y7c7V(60)!";r"r;rr;===;;;r;!;r",,-";!r---,--r"-,,''',---"rr!;r;r //
// ```...!;'!+-,")7)=()f7C*$*C*VE&&#Q##9QQ99M@@9d&&&dSUe$nFFC1e&&&&&&&&deVS&&&&&&&&&&&&##QQ#&&##&9&dd&F!,"<<=((=""=c#&Q@@@@QM@@#&S&@@@@@@@M@@@@Q&@@@@@@@@@@@@&+<=;!(z1&@@@@@@@@@@CQ@@@@@@@@#=,<	f"-++fz(UCz&&n7n&#Q@@@@@@Q&&E$V$$EAdd&&e)<=<<==!<)(CB%!,,,,--,..````.',""-,,-r;!;-'',,,";;rr"""""""rr;!=(c7z)< //
// ````.......` `` ,-.`..',-r;r""""";=(+f++)(<)fQC())+cczz777z7YYYzcff++)(()+czFF*1C$Add&&##&&@@@&dd&&9AccYAC))!<;,r<<!n9&&d&#@S(r;;e@@@@@@M9Q@@@&d#@@@@M@@@@@@@Q&9@@@@@@QzF$1$0@U&@@@@@@@@@@@&z)$@@@+;(!z#&@QEd@@#&###&ddAVVCz)==;r"-r!=<;r--"r;!;<f<d6rFr'''.``````.',,r",.''''.` `.'.'""-,''.'',---r;=<)+cf+)+ //
// ``` `` ``.',-"r;!;rrrr;=<()+++++ffzz77YFn***1$*CC$*CF7zzf)++f+++++czzn$VVVAd&&&&##&&&ddd1Fnzc))+(++r!;-,r)rrr"FA7<r""!$$&##&#@@#C#7zA#@@@@QQ@@@@@@@@@@@@W@@(7@@@@@@@@@@@@@@@@@@@@#eFM@@Qc)(+&&$zc+fzc+f777n1n$EV1Yf<<;r--"r;!;;rrrr"=+!0V""Y=`....'',-,''''.``.''..`.-rr-,r;rrr-,,"-----"r!=<(<=!=== //
// .. `````..',"r!=<=!!!!=<<<==<((())+++fccfcccczz7zzcf+(<==<<=!=<(+cznCFn*$VEEUAdddSUe$e1n*7c+(z)++=<"..-<=,"',=!+=",,;=!F7$7eSE()z;=fe@@@@@@Q9@@@@@@@@@@0@@@@@@@@@@@&&#V#@@@@@Q@#&S1neUVC7FnAddUC7YCUUd#Q9#9##9Q9Q@V)=!!(+fcz7zzcf))f+We;(!+B,,;---,''!+)<'.,--,..,"r-..-",...`.'---,''-"r;!!=;;;rr; //
// `` '`=(`'' `...',"r;;r""----""--"r;;!==<(<((())+fcYC$CYzf+++)))((()+zzF$Udd&c#&##&&dU$Cn7zc++)+fcc"',;(7f(frr!7Vc=!rr-;!zV(Y+!=<<;r=(d9&d&&#@@@@@@@@@@@@@@@@@@*n@@@@@@W01&@@@@@@9d&&d&#cQQQ9##9M@@#&&&&&&&#&&#Q9&Cczc++(())<;r-rrF6-;r;;6f';<!;r-(BzCAFr-.`.',,.`.,,.`....',""-'',--";;;rr;rr"rr //
// `` `` .,````` ```...',---"r;;;;rr""""r;;;;;!!<<)))))((<<(((((<;rrrrrrrr;;!!=(+7CeSdSSddVedddU$1nY7zz++))+)<-,"<)+ffY)=<7nFccF<+!rfAd+c((zFUn)+(7VEAd@@@@@@@@@@@@@@@@@@@)@@@@@@@@@@@W@@@@@@@#d&&&&#QQM0@@M@@@@@@@@@0M@0@@&ES##&d*Y7zf(<!;!()=!f#!r"";;!6;.','"r")YAY), `.''..',,.`.'..'',,,''',,,-r!!!rrrrrrrr //
// ``` ` ```'',,''',------,,,-"""""""""--""--------"""-------"r;;!=)+f))zFddVFCd&&&&&d$CCn7z77zf+<;<+z7zzc+<!)+fff77+z+7#5U)<fF7CFFf)+=<!z+Y@@@@@@00MM00WW@@@c@@@@@@@@&U&9@@@@@M@MM#$7F$A&##&&##99@@@9M@@@@00@Q#S&de*F7zcf+(<<(f+7<!UV";r;;!;(%r``.rr.,-,,`'''...''.``.,''',,,''',,,'',-;!;;;;;r;;r; //
// ``` ``.........'',,,,,'''',,,-""--,,,,,,,,'''''.'...``..'',-r;;!===(cf)(+cz7Fn1Y+)f+((<=!;;!!;;;!==!;!(<<=<)f+(<<(f7);!<;rrr!!;;r;!(+"e@@@@@@@@@W0000@@9@@@@&YfY$W@@@@@@@@Q@@@@#dd&999#&dV$eed&UdA&######&$C7ccf+)(<=!!!!)));!67r=;;;rr'"C+-```.``..'.....''..',,'',,,,,,,-,',-,''";r;;!!;;;;; //
// ``` ````..'''..``..'',--""-,'''''',,',,,,'.`````...',-r!=((<((<<<<((+z)(+ccf)+)(<fz7f+cccfcY1M$nYY77zccf+)(<===;r;;<)))(=;(,)z@@@@@@@W000000@@W@@Ce@@@@@@@@WWWWW#9@@@@@@#c##9#&&&9#&&&&&&&##&S$**CnY7zzf))<==F@@nf#7!=;rr"-"--)Y(".``.....''''',-----""------,,,,,,',,";;!<!!;;;!; //
// `` `` `.'..``````..'',,,,''',,,,,,,-"""r-,,-,-"rr!)+cnVV$$Ue$$1**VS$C1Ee$$1z<=(<<!=)Y*S@0@@Qncf)()fffzYnFY7c+))=f77)<!=7F<c$+rc@@@@@WW@@@@0@@M@@@@@00@@@@@@@WWSQ@Q@@@M9QM@0QQMM0Q9QQ99#####&dVSdUV1FY7cczz7FnC5@7<&F;;r;;";;"-.,<Fnz!,` `.....''',-"-"",'','.',,',r;;;;;!!!;; //
// ` ``` ````.')<=;",r=cc+=(()()+7FCnF77f(((<=!!r",'..'--<#@@nnYFC7;;;!=!!!!!!!;;r-,r)f*+;=<<))<f9' "A@@@@@@@@@0@@@@@07cF@@@@VFFnCeQ@@@@@@@Q0@MM@9#&&&&&&&&&&ded&dEV$1nFYFY7YF7zc+fcfcrf6-r""""r,-"r"-,-!+7zcfc7YY77zf)<!;;"'```.,""'.','''-rrr;!=!===! //
// ````..."<c('.',"=r,-------""rr;;rrrr"-"---,,,,,,-""!*@*SS1);!!!==!!!!;;;!;r";=r;---,,,-,=<;' .f@@@@@@@00W@@@@fY@@@@110@@@@@@@@@@@@@@@@@@0@@@@@@09MQQQ#&##&dAAUEeEeE$1nnY7z+))(+r#C;=;r"""r;r-,,,,'''-rrr;=(((<()fc+fcc+<r'`..''.',"r;;;!!=<===! //
// ``` `.....``.....',-"rrr"rr"rrr""rrrr""rrr""""""""-""=!"<)(<;rr;!!;!==!!;;;r"-,'''',,---"rr="`-r, "$@@@@@0W00@@@@@@F(f#@@@VYYFn11*Q@@@@@@@@@@@@@@@@@@@@QM9##&&dddddddV$$$CYc(=!=!<(;B<-r"""--,--"""r-,,,'.,-",,,'.'.`.'''"=()!'`.',-"r!!;!=!==<<<! //
// ``` ```....''''...'',,--"""------,-,,''',-----"""-"-"(=,''',-r;;;;r""-"------,,-"""rrrrr"""r<;.`r)r`.f@@@@@@MM0@@@@r(&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0Q9#9#&SSdddSASEEVCY+()(<;;";(!1c;""---;!=Yn!',,--!)fnY,,'','''-,'''.`.-<=,`,rr!=<)<;(()<==! //
// ```...'''''..`..rc!,---,,''''''',,'''',,,,'''''''.',,,,,'',"r!==<(<<!!=<<!!;",,,r<((<<(<)c!..=z!'=@@@@@0MM0@@@Q@@@6E@@@@@@@@@@@W@@@@@@@@@@@@@@@@@@@@@@0M00@M9#&&&&dSA*zc+(===!;!(;(<!r"-"r";)7)(;,-.;&Yz<..''..,-,',''''..`,<(""(<<;-r`!)r)!=! //
// ``````..'',,,,,''''..,!-.'''''......''''''''''',,,,,,,''..',-r<+Y$eUd&&dEVnz)=!!=<)<=<;rrrr;!;r!)!'.=zr"U@@@@0MMW@@@@*+@@@@@@@@@@@@@@@@%@@@@Q0@MQ@@@@@@@M9#&##99##&dUAAAVFzzfff+(=!=!!)(()(!;r--'''r(r'',";;r'','.,"-,',,''...'--r((;"!=" r.'rr+<<! //
// `..'''''.''...'''r",'.'''''.....``````..'''..`````.',-r!(+fcf(<!!!!!;=(zd#9#&VY(!r"rr""--"r!<!;=+<',z7"!@@@@WMM@@@@n@@eV@@@@@@@@@@@@@@@@@@@Q##@@@@@@@@@MQQ####&dVCCCC*11Yzcf(!=<===;";;;<((=!;r;;;;;;;r-,'.,'.'--'.','..' .','-r.")"'-',,,+)+<<<= //
// ```` ```.'";;r-,'',,,.rf<=-`'''''..''.'..````````.'"!(()<(((<;"-,,''''',-";!!==<+cY$S&C7z7c++))(!rrr;;r<cr.=d)"C@@@@0W@@@@@n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Q9999####&&&&&SdeEEV##QC(=<!r;rr;!;r;;;;;!<(!!rr""rr"";!r,-rr",--,``'r'.' "r=,))Y`'f((<<=! //
// `` ````..``....'-""",'''''.r!;(c!"-"""""""""rrr!=<==<<<)++(!r"-,'',,-""rr""rrr"-,,,,,,,---"r;=()fc7zfzz)<!!=!=+),.+U+z@@@@@@@@@@@@@@@@@@@@W@@@@@@@@@@@@@@@@@@@099#&SSSSAUddSVCFnF77&@@@@@@@+rr"""rrrrrr;;;==;rr"r"-,'',"-..',''---r""- '".-rzf=)7<(''7YYY7+< //
// ``` `.,,,'...````.Y@$F;,--""""""r;==(fz+!-,,'";'''',,,,,'''''''''r=r,'''',,--""""-"""r;!=<))=!!!;r;(Y+',7eC@@@@@@@@@@@@@@@@0000@@@@@@@@@@@@@@@@@@@@Q&&&&&dSd&ECCYzcccc+Q@@@@@@@@="-,,',,,-";!!!!=!!=!;!!;;!<;;(<!()+YYF$=;;,;"<E*z)fcV&+-cAFY7Yf //
// ``` ``` ``` ```` `.,",'''.'`;#cA1-''...'''''''''',-'',,,"r"-'...'''''',,','"c7n),'...'''',,---""""""r==rrrrr(YF1@@f,")E@@@@@@@@@@@@@@BVVABW@@@@@@@@@@@@&Y+(+n@@VE&###&dSeVCC1FYYnn5@@@@@@@@+!!r;r""----rr;r;;;;;!!=<<)()++czf)(<<!<-'!,c(z!;(cVV*nFff(((((< //
// ```..`` ` ``````` `......',r<)"',,,',,,'.......',,"r-,,,,''..''''..'...''-r;r",,'''''''''''',,,,,--"""-""c$1**C1@@+,,=F#@@@@@@@@@@@@@@@@@@@@@@MdCf=r-,,r(*de@C7eddddd&##&S$*$$*z$@Q@@9*z<"rr"rrrr"-"rr;rrrrr"----""rr;;;;;rr;;;!=ff<cnCY7*C71YnYzzczz<=<< //
// `` ```` ` ` ` ``````` ."r;;rr,..``` `````.."'...''..',.````..````.r'`',,,,,--,,,,,,,,''''',,,,,,,,,-r"+d*CYFVnY@@C);r())c71ee&&&d*nn7zcf)(<<===<((+7eM0MU9#FYF&&&&&##de*nY7c)<!<"r;-r"-;;;rrrrrr""r""r"-"----"""-""-,,-"rrr;<(+z7n11CC1*$EVA$nYYFnF)<<r //
// //
// //
// //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
contract CC is ERC721Creator {
constructor() ERC721Creator("Celestial Creatures", "CC") {}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/proxy/Proxy.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/StorageSlot.sol";
contract ERC721Creator is Proxy {
constructor(string memory name, string memory symbol) {
assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = 0x5133522ea5A0494EcB83F26311A095DDD7a9D4b6;
(bool success, ) = 0x5133522ea5A0494EcB83F26311A095DDD7a9D4b6.delegatecall(abi.encodeWithSignature("initialize(string,string)", name, symbol));
require(success, "Initialization failed");
}
/**
* @dev Storage slot with the address of the current implementation.
* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
* validated in the constructor.
*/
bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
/**
* @dev Returns the current implementation address.
*/
function implementation() public view returns (address) {
return _implementation();
}
function _implementation() internal override view returns (address) {
return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)
pragma solidity ^0.8.0;
/**
* @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
* instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
* be specified by overriding the virtual {_implementation} function.
*
* Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
* different contract through the {_delegate} function.
*
* The success and return data of the delegated call will be returned back to the caller of the proxy.
*/
abstract contract Proxy {
/**
* @dev Delegates the current call to `implementation`.
*
* This function does not return to its internal call site, it will return directly to the external caller.
*/
function _delegate(address implementation) internal virtual {
assembly {
// Copy msg.data. We take full control of memory in this inline assembly
// block because it will not return to Solidity code. We overwrite the
// Solidity scratch pad at memory position 0.
calldatacopy(0, 0, calldatasize())
// Call the implementation.
// out and outsize are 0 because we don't know the size yet.
let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)
// Copy the returned data.
returndatacopy(0, 0, returndatasize())
switch result
// delegatecall returns 0 on error.
case 0 {
revert(0, returndatasize())
}
default {
return(0, returndatasize())
}
}
}
/**
* @dev This is a virtual function that should be overridden so it returns the address to which the fallback function
* and {_fallback} should delegate.
*/
function _implementation() internal view virtual returns (address);
/**
* @dev Delegates the current call to the address returned by `_implementation()`.
*
* This function does not return to its internal call site, it will return directly to the external caller.
*/
function _fallback() internal virtual {
_beforeFallback();
_delegate(_implementation());
}
/**
* @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
* function in the contract matches the call data.
*/
fallback() external payable virtual {
_fallback();
}
/**
* @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
* is empty.
*/
receive() external payable virtual {
_fallback();
}
/**
* @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
* call, or as part of the Solidity `fallback` or `receive` functions.
*
* If overridden should call `super._beforeFallback()`.
*/
function _beforeFallback() internal virtual {}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)
// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.
pragma solidity ^0.8.0;
/**
* @dev Library for reading and writing primitive types to specific storage slots.
*
* Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
* This library helps with reading and writing to such slots without the need for inline assembly.
*
* The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
*
* Example usage to set ERC1967 implementation slot:
* ```solidity
* contract ERC1967 {
* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
*
* function _getImplementation() internal view returns (address) {
* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
* }
*
* function _setImplementation(address newImplementation) internal {
* require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
* }
* }
* ```
*
* _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._
* _Available since v4.9 for `string`, `bytes`._
*/
library StorageSlot {
struct AddressSlot {
address value;
}
struct BooleanSlot {
bool value;
}
struct Bytes32Slot {
bytes32 value;
}
struct Uint256Slot {
uint256 value;
}
struct StringSlot {
string value;
}
struct BytesSlot {
bytes value;
}
/**
* @dev Returns an `AddressSlot` with member `value` located at `slot`.
*/
function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `BooleanSlot` with member `value` located at `slot`.
*/
function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
*/
function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `Uint256Slot` with member `value` located at `slot`.
*/
function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `StringSlot` with member `value` located at `slot`.
*/
function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `StringSlot` representation of the string storage pointer `store`.
*/
function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := store.slot
}
}
/**
* @dev Returns an `BytesSlot` with member `value` located at `slot`.
*/
function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.
*/
function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := store.slot
}
}
}
{
"compilationTarget": {
"contracts/CC.sol": "CC"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 300
},
"remappings": [
":@openzeppelin/=node_modules/@openzeppelin/"
]
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]