1 line
865 KiB
Plaintext
1 line
865 KiB
Plaintext
{"version":3,"sources":["ethers.min.js"],"names":["f","exports","module","define","amd","window","global","self","this","ethers","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","root","checkInt","value","parseInt","checkInts","arrayish","coerceArray","arg","copy","buffer","ArrayBuffer","isView","name","slice","Array","prototype","isArray","Uint8Array","createArray","copyArray","sourceArray","targetArray","targetStart","sourceStart","sourceEnd","set","Hex","convertUtf8","toBytes","text","result","encodeURI","c","charCodeAt","push","substr","fromBytes","bytes","String","fromCharCode","join","convertHex","v","numberOfRounds","16","24","32","rcon","S","Si","T1","T2","T3","T4","T5","T6","T7","T8","U1","U2","U3","U4","convertToInt32","AES","key","Object","defineProperty","_prepare","rounds","_Ke","_Kd","index","roundKeyCount","KC","tk","tt","rconpointer","encrypt","plaintext","decrypt","ciphertext","ModeOfOperationECB","description","_aes","block","ModeOfOperationCBC","iv","_lastCipherblock","j","ModeOfOperationCFB","segmentSize","_shiftRegister","xorSegment","encrypted","ModeOfOperationOFB","_lastPrecipher","_lastPrecipherIndex","Counter","initialValue","_counter","setValue","setBytes","increment","ModeOfOperationCTR","counter","_remainingCounter","_remainingCounterIndex","aesjs","ModeOfOperation","ecb","cbc","cfb","ofb","ctr","utils","hex","utf8","padding","pkcs7","pad","data","padder","strip","_arrayTest","_aesjs","2","assert","val","msg","inherits","ctor","superCtor","super_","TempCtor","constructor","BN","number","base","endian","isBN","negative","words","red","_init","Buffer","wordSize","parseHex","str","start","end","len","Math","min","parseBase","mul","num","max","left","right","cmp","_initNumber","_initArray","toString","replace","_parseHex","_parseBase","toArray","ceil","w","off","limbLen","limbPow","total","mod","word","imuln","_iaddn","pow","dest","clone","_expand","size","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","out","b","lo","carry","k","ncarry","rword","maxJ","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","byteLength","reqLength","littleEndian","res","q","andln","iushrn","_countBits","clz32","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","sub","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","x","y","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","rtwdf","cos","PI","itwdf","sin","p","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","tmp","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","input","output","outLen","prev","next","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","3","randomBytes","../../src.ts/utils","4","5","elliptic","version","rand","hmacDRBG","curve","curves","ec","eddsa","../package.json","./elliptic/curve","./elliptic/curves","./elliptic/ec","./elliptic/eddsa","./elliptic/hmac-drbg","./elliptic/utils","brorand","6","getNAF","getJSF","BaseCurve","type","conf","zero","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","naf","I","step","repr","nafW","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","jsf","ja","jb","decodePoint","enc","pointFromX","encodeCompressed","encode","_encode","compact","getX","getY","concat","precompute","power","beta","_getBeta","_hasDoubles","dbl","../../elliptic","bn.js","7","8","short","edwards","./base","./edwards","./mont","./short","9","arguments","apply","dup","10","Base","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","JPoint","zOne","lambda","betas","_getEndoRoots","lambdas","basis","map","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","floor","y1","y2","len1","_endoSplit","v1","v2","c1","c2","p1","p2","q1","q2","k1","k2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","obj","fromJSON","pre","endoMul","JSON","parse","obj2point","isInfinity","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","negate","zinv","zinv2","ay","pz2","z2","u1","u2","s1","s2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","t1","t2","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","d","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","xc","../curve","11","hash","PresetCurve","options","defineCurve","configurable","enumerable","get","sha256","sha384","sha512","undefined","../elliptic","./precomputed/secp256k1","hash.js","12","KeyPair","Signature","EC","hasOwnProperty","nh","keyPair","keyFromPrivate","priv","fromPrivate","keyFromPublic","pub","fromPublic","genKeyPair","drbg","pers","entropy","hmacStrength","nonce","ns2","generate","_truncateToN","truncOnly","sign","bkey","getPrivate","persEnc","ns1","iter","kp","kpX","recoveryParam","canonical","verify","signature","sinv","getPublic","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","./key","./signature","13","_importPrivate","privEnc","_importPublic","pubEnc","reason","derive","14","_importDER","Position","place","getLength","buf","initial","octetLen","rmPadding","constructLength","arr","octets","log","LN2","slen","toDER","backHalf","15","HmacDRBG","predResist","outSize","minEntropy","reseed","reseedInterval","K","V","entropyEnc","nonceEnc","seed","_update","_hmac","hmac","kmac","update","digest","addEnc","temp","17","18","zero2","toHex","d1","d2","m8","m14","m24","cachedProperty","computer","parseBytes","intFromLE","19","20","common","sha","ripemd","sha1","sha224","ripemd160","./hash/common","./hash/hmac","./hash/ripemd","./hash/sha","./hash/utils","21","BlockHash","pending","pendingTotal","blockSize","padLength","_delta8","_delta32","join32","_pad","_digest","./utils","minimalistic-assert","22","Hmac","Hash","inner","outer","23","./sha/1","./sha/224","./sha/256","./sha/384","./sha/512","25","26","27","shaCommon","sum32","sum32_4","sum32_5","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","SHA256","W","toHex32","split32","../common","../utils","./common","28","29","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","SHA512","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","ah","al","bh","bl","ch","cl","dh","dl","eh","el","fh","fl","gh","gl","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","30","rotr32","p32","ft_1","31","htonl","zero8","rotl32","sum32_3","pos","create","writable","33","34","process","JS_SHA3_NO_NODE_JS","versions","node","COMMON_JS","JS_SHA3_NO_COMMON_JS","HEX_CHARS","SHIFT","RC","BITS","OUTPUT_TYPES","createOutputMethod","outputType","message","Keccak","createShakeOutputMethod","outputBits","createMethod","method","algorithms","methods","methodNames","algorithm","methodName","blocks","reset","blockCount","byteCount","outputBlocks","extraBytes","notString","lastByteIndex","finalize","arrayBuffer","array","Uint32Array","offset","c0","c3","c4","c5","c6","c7","c9","b10","b11","b12","b13","b14","b15","b16","b17","b18","b19","b20","b21","b22","b23","b24","b25","b26","b27","b28","b29","b30","b31","b32","b33","b34","b35","b36","b37","b38","b39","b40","b41","b42","b43","b44","b45","b46","b47","b48","b49","_process","35","equal","36","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","noop","nextTick","args","title","browser","env","argv","on","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","37","MAX_VALUE","h0","h1","h4","h5","h6","h7","bytesLeft","bitLenHi","bitLenLo","numZeros","PBKDF2_HMAC_SHA256_OneIter","password","salt","dkLen","innerLen","outerKey","dk","incrementCounter","blockmix_salsa8","BY","Yi","_X","arraycopy","blockxor","salsa20_8","R","src","srcPos","destPos","checkBufferish","ensureInteger","intValue","scrypt","callback","i1","Bi","XY","totalOps","currentOp","lastPercent10","stop","state","i0","limit","setImmediate","incrementalSMix","steps","percent10","derivedKey","_scrypt","38","rng","crypto","getRandomValues","_rnds8","_rnds","random","39","_rng","_byteToHex","_hexToByte","unparse","bth","_seedBytes","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v4","rnds","ii","uuid","clockseq","msecs","Date","getTime","nsecs","dt","tl","tmh","toLowerCase","oct","./rng","40","convert_1","decode","textData","atob","arrayify","btoa","../src.ts/utils/convert","41","XMLHttpRequest","error","console","42","__importStar","__esModule","interface_1","address_1","bignumber_1","properties_1","errors","allowedTransactionKeys","from","gasLimit","gasPrice","to","runMethod","contract","functionName","estimateOnly","interface","functions","params","_i","transaction","inputs","object","copyObject","pop","forEach","addressPromise","resolveAddresses","provider","paramType","promises","Promise","all","resolveName","components","resolve","then","ConstantZero","signer","address","getAddress","resolveProperties","outputs","throwError","CALL_EXCEPTION","reject","estimateGas","sendTransaction","chainId","getNetwork","network","defaultGasLimit","getTransactionCount","defaultGasPrice","getGasPrice","signedTransaction","Contract","addressOrName","contractInterface","signerOrProvider","_this","checkNew","Interface","defineReadOnly","keys","estimate","events","eventName","eventInfo","eventCallback","handleEvent","topics","event","getBlock","blockHash","getTransaction","transactionHash","getTransactionReceipt","eventSignature","property","propertyName","connect","deploy","bytecode","deployFunction","tx","getContractAddress","../utils/address","../utils/bignumber","../utils/errors","../utils/properties","./interface","43","contract_1","./contract","44","extendStatics","__extends","setPrototypeOf","__proto__","__","abi_coder_1","keccak256_1","utf8_1","parseParams","names","types","param","substring","suffix","arrayBracket","indexOf","Indexed","Description","info","defineFrozen","DeployDescription","_super","isHexString","INVALID_ARGUMENT","MISSING_ARGUMENT","count","expectedCount","UNEXPECTED_ARGUMENT","defaultAbiCoder","FunctionDescription","sighash","errorArg","errorValue","Result","EventDescription","anonymous","inputIndexed","inputNonIndexed","inputDynamic","indexed","resultIndexed","resultNonIndexed","nonIndexedIndex","indexedIndex","addMethod","payable","keccak256","toUtf8Bytes","abi","errorMessage","_abi","fragment","parseSignature","parseTransaction","func","bigNumberify","../utils/abi-coder","../utils/convert","../utils/keccak256","../utils/utf8","45","provider_1","web_1","getTransactionString","hexlify","hexStripZeros","getResult","status","stringify","getJsonResult","jsonrpc","checkLogTag","blockTag","EtherscanProvider","apiKey","baseUrl","perform","url","fetchJson","position","filter","fromBlock","toBlock","topic0","logs","txs","seq","parseFloat","ethusd","getHistory","startBlock","endBlock","creates","contractAddress","item","checkTransactionResponse","timeStamp","timestamp","Provider","../utils/web","./provider","46","checkNetworks","networks","check","ensAddress","FallbackProvider","providers","ready","UNKNOWN_ERROR","_providers","firstError","47","etherscan_provider_1","fallback_provider_1","infura_provider_1","InfuraProvider","json_rpc_provider_1","JsonRpcProvider","web3_provider_1","Web3Provider","getDefaultProvider","./etherscan-provider","./fallback-provider","./infura-provider","./json-rpc-provider","./web3-provider","48","networks_1","apiAccessToken","host","_startPending","getSigner","UNSUPPORTED_OPERATION","operation","listAccounts","./networks","49","payload","hexlifyTransaction","getLowerCase","JsonRpcSigner","_address","send","accounts","getBalance","wait","waitForTransaction","signMessage","unlock","connection","request","id","NOT_IMPLEMENTED","_pendingFilter","pendingFilter","filterId","poll","hashes","_emitted","_stopPending","50","unspecified","homestead","mainnet","morden","ropsten","testnet","rinkeby","kovan","classic","networkObj","51","rlp_1","namehash_1","format","checkKey","checkValue","allowNull","nullValue","arrayOf","checkHash","checkNumber","checkUint256","uint256","checkBlockTag","formatBlock","parentHash","difficulty","gasUsed","miner","extraData","transactions","checkBlock","author","formatTransaction","blockNumber","transactionIndex","raw","gas","stripZeros","networkId","formatTransactionRequest","checkTransactionRequest","formatTransactionReceiptLog","transactionLogIndex","logIndex","formatTransactionReceipt","logsBloom","cumulativeGasUsed","formatFilter","checkTopics","topic","replaceValue","formatLog","removed","checkLog","stallPromise","allowNullFunc","executeFunc","attempt","trunc","recurse","convertFunc","getEventString","_network","_lastBlockNumber","_balances","_events","_pollingInterval","_doPoll","getBlockNumber","newBalances","string","parseEventString","balance","lastBalance","getLogs","doPoll","resetEventsBlock","_poller","setInterval","bind","pollingInterval","clearInterval","timer","complete","_a","getCode","getStorageAt","_resolveNames","blockHashOrBlockTag","transactionReceipt","entry","byzantium","getEtherPrice","_getResolver","namehash","nodeHash","resolverAddress","lookupAddress","nodehash","toUtf8String","addr","listener","polling","splice","listenerCount","eventNameString","../utils/namehash","../utils/rlp","52","web3Provider","sendAsync","path","_web3Provider","isMetaMask","53","paramTypeBytes","RegExp","paramTypeNumber","paramTypeArray","defaultCoerceFunc","match","regexParen","regexIdentifier","verifyType","parseParam","allowIndexed","parent","allowType","allowParams","child","allowName","allowArray","sibling","readArray","trim","splitNesting","modifier","parseSignatureEvent","constant","stateMutability","comps","parseSignatureFunction","Coder","coerceFunc","localName","dynamic","CoderNull","consumed","CoderNumber","signed","padZeros","coderType","junkLength","uint256Coder","CoderBoolean","CoderFixedBytes","CoderAddress","_encodeDynamicBytes","dataLength","_decodeDynamicBytes","CoderDynamicBytes","CoderString","alignSize","pack","coders","values","arrayValues","coder","parts","staticSize","dynamicSize","part","dynamicOffset","unpack","baseOffset","CoderArray","decodedLength","CoderTuple","accum","depth","paramTypeSimple","bool","getParamCoder","component","getTupleParamCoder","AbiCoder","./address","./bignumber","./convert","./errors","./utf8","54","getChecksumAddress","chars","hashed","i_1","toUpperCase","ibanLookup","safeDigits","log10","LN10","ibanChecksum","expanded","checksum","icapFormat","base36","./keccak256","./rlp","55","__importDefault","default","bn_js_1","_isBigNumber","isBigNumber","BigNumber","_bn","ConstantNegativeOne","NUMERIC_FAULT","fault","outputValue","details","isArrayish","other","toHexString","ConstantOne","ConstantTwo","ConstantWeiPerEther","56","addSlice","objects","arrays","HexCharacters","hexZeroPad","splitSignature","57","messageDetails","MISSING_NEW","kind","58","_hash","_sha256","_sha512","createSha256Hmac","createSha512Hmac","59","60","base64","bigNumber","convert","id_1","sha2","solidity","random_bytes_1","RLP","units","etherSymbol","formatEther","parseEther","formatUnits","parseUnits","solidityPack","solidityKeccak256","soliditySha256","./abi-coder","./base64","./id","./namehash","./random-bytes","./sha2","./solidity","./units","./web","61","sha3","keccak_256","js-sha3","62","Zeros","Partition","UseSTD3ASCIIRules","partition","label","63","pbkdf2","iterations","keylen","createHmac","hLen","T","DK","block1","U","64","frozen","defineDeferredReadOnly","_value","setter","65","66","arrayifyInteger","unshift","unarrayifyInteger","_decodeChildren","childOffset","decoded","_decode","lengthLength","67","68","sha2_1","regexBytes","regexNumber","regexArray","tight","_pack","baseType","69","getUnitInfo","unitInfos","decimals","tenPower","unitType","unitInfo","fraction","whole","commify","wei","ether","70","UnicodeNormalizationForm","form","normalize","extraLength","nextChar","71","xmlhttprequest_1","base64_1","json","processFunc","headers","user","allowInsecure","authorization","open","header","setRequestHeader","onreadystatechange","readyState","responseText","jsonError","orginialError","body","statusCode","onerror","connectionError","xmlhttprequest","72","secp256k1","wordlist","pbkdf2_1","hmac_1","MasterSecret","HardenedBit","getUpperMask","HDNode","chainCode","mnemonic","privateKey","publicKey","_derive","IL","IR","ki","derivePath","_fromSeed","mnemonicToSeed","NFKD","mnemonicToEntropy","entropyBits","checksumMask","fromMnemonic","fromSeed","entropyToMnemonic","remainingBits","checksumBits","isValidMnemonic","../utils/hmac","../utils/pbkdf2","../utils/sha2","./secp256k1","./words","73","wallet_1","Wallet","signing_key_1","SigningKey","./hdnode","./signing-key","./wallet","74","75","aes","defaultPath","looseArrayify","hexString","zpad","getPassword","NFKC","searchPath","currentChild","matchingChild","isCrowdsaleWallet","encseed","ethaddr","isValidWallet","decryptCrowdsale","encryptedSeed","aesCbc","seedHex","seedHexBytes","signingKey","progressCallback","getSigningKey","derivedHalf","aesCtr","mnemonicKey","mnemonicCiphertext","mnemonicIv","mnemonicCounter","mnemonicAesCtr","kdf","progress","prfFunc","prf","client","uuidRandom","macPrefix","mac","Crypto","cipher","cipherparams","kdfparams","dklen","now","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","gethFilename","../utils/random-bytes","aes-js","scrypt-js","76","publicKeyToAddress","signDigest","recover","getPublicKey","compressed","77","scrypt_js_1","hdnode_1","secretStorage","transactionFields","maxLength","fieldInfo","rawTransaction","calculate","gasPricePromise","noncePromise","toPromise","results","amountWei","hashMessage","sig","verifyMessage","safeOptions","createRandom","extraEntropy","isEncryptedWallet","fromEncryptedWallet","wallet","fromBrainWallet","username","./secret-storage","78","79","contracts_1","utils_1","./contracts","./providers","./utils/errors"],"mappings":"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GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAC//CC,EAAI,CAAC,GAAM,EAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,EAAM,IAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,EAAM,EAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAAM,EAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,GAAM,EAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KAG//CC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAG1/FC,EAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,EAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,SAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,EAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,WAAY,SAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,SAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,EAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,YAG1/FC,EAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAC1/FC,EAAK,CAAC,EAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,UAAY,UAAY,SAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,UAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAE9/F,SAASC,EAAezB,GAEpB,IADA,IAAIP,EAAS,GACJrC,EAAI,EAAGA,EAAI4C,EAAMvC,OAAQL,GAAK,EACnCqC,EAAOI,KACFG,EAAM5C,IAAU,GAChB4C,EAAM5C,EAAI,IAAM,GAChB4C,EAAM5C,EAAI,IAAO,EACjB4C,EAAM5C,EAAI,IAGnB,OAAOqC,EAGX,IAAIiC,EAAM,SAASC,GACf,KAAMlF,gBAAgBiF,GAClB,MAAMrE,MAAM,uCAGhBuE,OAAOC,eAAepF,KAAM,MAAO,CAC/BoB,MAAOI,EAAY0D,GAAK,KAG5BlF,KAAKqF,YAITJ,EAAIhD,UAAUoD,SAAW,WAErB,IAAIC,EAASzB,EAAe7D,KAAKkF,IAAIlE,QACrC,GAAc,MAAVsE,EACA,MAAM,IAAI1E,MAAM,iDAIpBZ,KAAKuF,IAAM,GAGXvF,KAAKwF,IAAM,GAEX,IAAK,IAAI7E,EAAI,EAAGA,GAAK2E,EAAQ3E,IACzBX,KAAKuF,IAAInC,KAAK,CAAC,EAAG,EAAG,EAAG,IACxBpD,KAAKwF,IAAIpC,KAAK,CAAC,EAAG,EAAG,EAAG,IAG5B,IAOIqC,EAPAC,EAA+B,GAAdJ,EAAS,GAC1BK,EAAK3F,KAAKkF,IAAIlE,OAAS,EAGvB4E,EAAKZ,EAAehF,KAAKkF,KAI7B,IAASvE,EAAI,EAAGA,EAAIgF,EAAIhF,IACpB8E,EAAQ9E,GAAK,EACbX,KAAKuF,IAAIE,GAAO9E,EAAI,GAAKiF,EAAGjF,GAC5BX,KAAKwF,IAAIF,EAASG,GAAO9E,EAAI,GAAKiF,EAAGjF,GAMzC,IAFA,IACYkF,EADRC,EAAc,EACd3F,EAAIwF,EACDxF,EAAIuF,GAAe,CAUtB,GATAG,EAAKD,EAAGD,EAAK,GACbC,EAAG,IAAQ1B,EAAG2B,GAAM,GAAM,MAAS,GACxB3B,EAAG2B,GAAO,EAAK,MAAS,GACxB3B,EAAe,IAAZ2B,IAAsB,EACzB3B,EAAG2B,GAAM,GAAM,KACf5B,EAAK6B,IAAgB,GAChCA,GAAe,EAGL,GAANH,EACA,IAAShF,EAAI,EAAGA,EAAIgF,EAAIhF,IACpBiF,EAAGjF,IAAMiF,EAAGjF,EAAI,OAIjB,CACH,IAASA,EAAI,EAAGA,EAAKgF,EAAK,EAAIhF,IAC1BiF,EAAGjF,IAAMiF,EAAGjF,EAAI,GAEpBkF,EAAKD,EAAID,EAAK,EAAK,GAEnBC,EAAGD,EAAK,IAAOzB,EAAe,IAAZ2B,GACH3B,EAAG2B,GAAO,EAAK,MAAU,EACzB3B,EAAG2B,GAAM,GAAM,MAAS,GACxB3B,EAAG2B,GAAM,GAAM,MAAS,GAEvC,IAASlF,EAAKgF,EAAK,EAAK,EAAGhF,EAAIgF,EAAIhF,IAC/BiF,EAAGjF,IAAMiF,EAAGjF,EAAI,GAMxB,IADIA,EAAI,EACDA,EAAIgF,GAAMxF,EAAIuF,GACjBrF,EAAIF,GAAK,EACT+C,EAAI/C,EAAI,EACRH,KAAKuF,IAAIlF,GAAG6C,GAAK0C,EAAGjF,GACpBX,KAAKwF,IAAIF,EAASjF,GAAG6C,GAAK0C,EAAGjF,KAC7BR,IAKR,IAAK,IAAIE,EAAI,EAAGA,EAAIiF,EAAQjF,IACxB,IAAK,IAAI6C,EAAI,EAAGA,EAAI,EAAGA,IACnB2C,EAAK7F,KAAKwF,IAAInF,GAAG6C,GACjBlD,KAAKwF,IAAInF,GAAG6C,GAAM0B,EAAIiB,GAAM,GAAM,KAChBhB,EAAIgB,GAAM,GAAM,KAChBf,EAAIe,GAAO,EAAK,KAChBd,EAAgB,IAAZc,IAKlCZ,EAAIhD,UAAU8D,QAAU,SAASC,GAC7B,GAAwB,IAApBA,EAAUhF,OACV,MAAM,IAAIJ,MAAM,6CAQpB,IALA,IAAI0E,EAAStF,KAAKuF,IAAIvE,OAAS,EAC3BP,EAAI,CAAC,EAAG,EAAG,EAAG,GAGdN,EAAI6E,EAAegB,GACdrF,EAAI,EAAGA,EAAI,EAAGA,IACnBR,EAAEQ,IAAMX,KAAKuF,IAAI,GAAG5E,GAIxB,IAAK,IAAIN,EAAI,EAAGA,EAAIiF,EAAQjF,IAAK,CAC7B,IAASM,EAAI,EAAGA,EAAI,EAAGA,IACnBF,EAAEE,GAAMyD,EAAIjE,EAAGQ,IAAe,GAAM,KAC5B0D,EAAIlE,GAAGQ,EAAI,GAAK,IAAM,GAAM,KAC5B2D,EAAInE,GAAGQ,EAAI,GAAK,IAAO,EAAK,KAC5B4D,EAA4B,IAAxBpE,GAAGQ,EAAI,GAAK,IAChBX,KAAKuF,IAAIlF,GAAGM,GAExBR,EAAIM,EAAEsB,QAIV,IAA8B8D,EAA1B7C,EAASZ,EAAY,IACzB,IAASzB,EAAI,EAAGA,EAAI,EAAGA,IACnBkF,EAAK7F,KAAKuF,IAAID,GAAQ3E,GACtBqC,EAAO,EAAIrC,GAA2D,KAAjDuD,EAAG/D,EAAGQ,IAAe,GAAM,KAASkF,GAAM,IAC/D7C,EAAO,EAAIrC,EAAI,GAAuD,KAAjDuD,EAAG/D,GAAGQ,EAAI,GAAK,IAAM,GAAM,KAASkF,GAAM,IAC/D7C,EAAO,EAAIrC,EAAI,GAAuD,KAAjDuD,EAAG/D,GAAGQ,EAAI,GAAK,IAAO,EAAK,KAASkF,GAAO,GAChE7C,EAAO,EAAIrC,EAAI,GAAuD,KAAjDuD,EAA2B,IAAxB/D,GAAGQ,EAAI,GAAK,IAAqBkF,GAG7D,OAAO7C,GAGXiC,EAAIhD,UAAUgE,QAAU,SAASC,GAC7B,GAAyB,IAArBA,EAAWlF,OACX,MAAM,IAAIJ,MAAM,8CAQpB,IALA,IAAI0E,EAAStF,KAAKwF,IAAIxE,OAAS,EAC3BP,EAAI,CAAC,EAAG,EAAG,EAAG,GAGdN,EAAI6E,EAAekB,GACdvF,EAAI,EAAGA,EAAI,EAAGA,IACnBR,EAAEQ,IAAMX,KAAKwF,IAAI,GAAG7E,GAIxB,IAAK,IAAIN,EAAI,EAAGA,EAAIiF,EAAQjF,IAAK,CAC7B,IAASM,EAAI,EAAGA,EAAI,EAAGA,IACnBF,EAAEE,GAAM6D,EAAIrE,EAAGQ,IAAgB,GAAM,KAC7B8D,EAAItE,GAAGQ,EAAI,GAAK,IAAM,GAAM,KAC5B+D,EAAIvE,GAAGQ,EAAI,GAAK,IAAO,EAAK,KAC5BgE,EAA4B,IAAxBxE,GAAGQ,EAAI,GAAK,IAChBX,KAAKwF,IAAInF,GAAGM,GAExBR,EAAIM,EAAEsB,QAIV,IAA8B8D,EAA1B7C,EAASZ,EAAY,IACzB,IAASzB,EAAI,EAAGA,EAAI,EAAGA,IACnBkF,EAAK7F,KAAKwF,IAAIF,GAAQ3E,GACtBqC,EAAO,EAAIrC,GAA4D,KAAlDwD,EAAIhE,EAAGQ,IAAe,GAAM,KAASkF,GAAM,IAChE7C,EAAO,EAAIrC,EAAI,GAAwD,KAAlDwD,EAAIhE,GAAGQ,EAAI,GAAK,IAAM,GAAM,KAASkF,GAAM,IAChE7C,EAAO,EAAIrC,EAAI,GAAwD,KAAlDwD,EAAIhE,GAAGQ,EAAI,GAAK,IAAO,EAAK,KAASkF,GAAO,GACjE7C,EAAO,EAAIrC,EAAI,GAAwD,KAAlDwD,EAA4B,IAAxBhE,GAAGQ,EAAI,GAAK,IAAqBkF,GAG9D,OAAO7C,GAOX,IAAImD,EAAqB,SAASjB,GAC9B,KAAMlF,gBAAgBmG,GAClB,MAAMvF,MAAM,uCAGhBZ,KAAKoG,YAAc,wBACnBpG,KAAK8B,KAAO,MAEZ9B,KAAKqG,KAAO,IAAIpB,EAAIC,IAGxBiB,EAAmBlE,UAAU8D,QAAU,SAASC,GAG5C,IAFAA,EAAYxE,EAAYwE,IAEThF,OAAS,IAAQ,EAC5B,MAAM,IAAIJ,MAAM,yDAMpB,IAHA,IAAIsF,EAAa9D,EAAY4D,EAAUhF,QACnCsF,EAAQlE,EAAY,IAEfzB,EAAI,EAAGA,EAAIqF,EAAUhF,OAAQL,GAAK,GACvC0B,EAAU2D,EAAWM,EAAO,EAAG3F,EAAGA,EAAI,IAEtC0B,EADAiE,EAAQtG,KAAKqG,KAAKN,QAAQO,GACTJ,EAAYvF,GAGjC,OAAOuF,GAGXC,EAAmBlE,UAAUgE,QAAU,SAASC,GAG5C,IAFAA,EAAa1E,EAAY0E,IAETlF,OAAS,IAAQ,EAC7B,MAAM,IAAIJ,MAAM,0DAMpB,IAHA,IAAIoF,EAAY5D,EAAY8D,EAAWlF,QACnCsF,EAAQlE,EAAY,IAEfzB,EAAI,EAAGA,EAAIuF,EAAWlF,OAAQL,GAAK,GACxC0B,EAAU6D,EAAYI,EAAO,EAAG3F,EAAGA,EAAI,IAEvC0B,EADAiE,EAAQtG,KAAKqG,KAAKJ,QAAQK,GACTN,EAAWrF,GAGhC,OAAOqF,GAOX,IAAIO,EAAqB,SAASrB,EAAKsB,GACnC,KAAMxG,gBAAgBuG,GAClB,MAAM3F,MAAM,uCAMhB,GAHAZ,KAAKoG,YAAc,wBACnBpG,KAAK8B,KAAO,MAEP0E,GAGE,GAAiB,IAAbA,EAAGxF,OACV,MAAM,IAAIJ,MAAM,4DAHhB4F,EAAKpE,EAAY,IAMrBpC,KAAKyG,iBAAmBjF,EAAYgF,GAAI,GAExCxG,KAAKqG,KAAO,IAAIpB,EAAIC,IAGxBqB,EAAmBtE,UAAU8D,QAAU,SAASC,GAG5C,IAFAA,EAAYxE,EAAYwE,IAEThF,OAAS,IAAQ,EAC5B,MAAM,IAAIJ,MAAM,yDAMpB,IAHA,IAAIsF,EAAa9D,EAAY4D,EAAUhF,QACnCsF,EAAQlE,EAAY,IAEfzB,EAAI,EAAGA,EAAIqF,EAAUhF,OAAQL,GAAK,GAAI,CAC3C0B,EAAU2D,EAAWM,EAAO,EAAG3F,EAAGA,EAAI,IAEtC,IAAK,IAAI+F,EAAI,EAAGA,EAAI,GAAIA,IACpBJ,EAAMI,IAAM1G,KAAKyG,iBAAiBC,GAGtC1G,KAAKyG,iBAAmBzG,KAAKqG,KAAKN,QAAQO,GAC1CjE,EAAUrC,KAAKyG,iBAAkBP,EAAYvF,GAGjD,OAAOuF,GAGXK,EAAmBtE,UAAUgE,QAAU,SAASC,GAG5C,IAFAA,EAAa1E,EAAY0E,IAETlF,OAAS,IAAQ,EAC7B,MAAM,IAAIJ,MAAM,0DAMpB,IAHA,IAAIoF,EAAY5D,EAAY8D,EAAWlF,QACnCsF,EAAQlE,EAAY,IAEfzB,EAAI,EAAGA,EAAIuF,EAAWlF,OAAQL,GAAK,GAAI,CAC5C0B,EAAU6D,EAAYI,EAAO,EAAG3F,EAAGA,EAAI,IACvC2F,EAAQtG,KAAKqG,KAAKJ,QAAQK,GAE1B,IAAK,IAAII,EAAI,EAAGA,EAAI,GAAIA,IACpBV,EAAUrF,EAAI+F,GAAKJ,EAAMI,GAAK1G,KAAKyG,iBAAiBC,GAGxDrE,EAAU6D,EAAYlG,KAAKyG,iBAAkB,EAAG9F,EAAGA,EAAI,IAG3D,OAAOqF,GAOX,IAAIW,EAAqB,SAASzB,EAAKsB,EAAII,GACvC,KAAM5G,gBAAgB2G,GAClB,MAAM/F,MAAM,uCAMhB,GAHAZ,KAAKoG,YAAc,kBACnBpG,KAAK8B,KAAO,MAEP0E,GAGE,GAAiB,IAAbA,EAAGxF,OACV,MAAM,IAAIJ,MAAM,2DAHhB4F,EAAKpE,EAAY,IAMhBwE,IAAeA,EAAc,GAElC5G,KAAK4G,YAAcA,EAEnB5G,KAAK6G,eAAiBrF,EAAYgF,GAAI,GAEtCxG,KAAKqG,KAAO,IAAIpB,EAAIC,IAGxByB,EAAmB1E,UAAU8D,QAAU,SAASC,GAC5C,GAAKA,EAAUhF,OAAShB,KAAK4G,aAAgB,EACzC,MAAM,IAAIhG,MAAM,sDAMpB,IAHA,IAEIkG,EAFAC,EAAYvF,EAAYwE,GAAW,GAG9BrF,EAAI,EAAGA,EAAIoG,EAAU/F,OAAQL,GAAKX,KAAK4G,YAAa,CACzDE,EAAa9G,KAAKqG,KAAKN,QAAQ/F,KAAK6G,gBACpC,IAAK,IAAIH,EAAI,EAAGA,EAAI1G,KAAK4G,YAAaF,IAClCK,EAAUpG,EAAI+F,IAAMI,EAAWJ,GAInCrE,EAAUrC,KAAK6G,eAAgB7G,KAAK6G,eAAgB,EAAG7G,KAAK4G,aAC5DvE,EAAU0E,EAAW/G,KAAK6G,eAAgB,GAAK7G,KAAK4G,YAAajG,EAAGA,EAAIX,KAAK4G,aAGjF,OAAOG,GAGXJ,EAAmB1E,UAAUgE,QAAU,SAASC,GAC5C,GAAKA,EAAWlF,OAAShB,KAAK4G,aAAgB,EAC1C,MAAM,IAAIhG,MAAM,uDAMpB,IAHA,IAEIkG,EAFAd,EAAYxE,EAAY0E,GAAY,GAG/BvF,EAAI,EAAGA,EAAIqF,EAAUhF,OAAQL,GAAKX,KAAK4G,YAAa,CACzDE,EAAa9G,KAAKqG,KAAKN,QAAQ/F,KAAK6G,gBAEpC,IAAK,IAAIH,EAAI,EAAGA,EAAI1G,KAAK4G,YAAaF,IAClCV,EAAUrF,EAAI+F,IAAMI,EAAWJ,GAInCrE,EAAUrC,KAAK6G,eAAgB7G,KAAK6G,eAAgB,EAAG7G,KAAK4G,aAC5DvE,EAAU6D,EAAYlG,KAAK6G,eAAgB,GAAK7G,KAAK4G,YAAajG,EAAGA,EAAIX,KAAK4G,aAGlF,OAAOZ,GAMX,IAAIgB,EAAqB,SAAS9B,EAAKsB,GACnC,KAAMxG,gBAAgBgH,GAClB,MAAMpG,MAAM,uCAMhB,GAHAZ,KAAKoG,YAAc,kBACnBpG,KAAK8B,KAAO,MAEP0E,GAGE,GAAiB,IAAbA,EAAGxF,OACV,MAAM,IAAIJ,MAAM,4DAHhB4F,EAAKpE,EAAY,IAMrBpC,KAAKiH,eAAiBzF,EAAYgF,GAAI,GACtCxG,KAAKkH,oBAAsB,GAE3BlH,KAAKqG,KAAO,IAAIpB,EAAIC,IAGxB8B,EAAmB/E,UAAU8D,QAAU,SAASC,GAG5C,IAFA,IAAIe,EAAYvF,EAAYwE,GAAW,GAE9BrF,EAAI,EAAGA,EAAIoG,EAAU/F,OAAQL,IACD,KAA7BX,KAAKkH,sBACLlH,KAAKiH,eAAiBjH,KAAKqG,KAAKN,QAAQ/F,KAAKiH,gBAC7CjH,KAAKkH,oBAAsB,GAE/BH,EAAUpG,IAAMX,KAAKiH,eAAejH,KAAKkH,uBAG7C,OAAOH,GAIXC,EAAmB/E,UAAUgE,QAAUe,EAAmB/E,UAAU8D,QAMpE,IAAIoB,EAAU,SAASC,GACnB,KAAMpH,gBAAgBmH,GAClB,MAAMvG,MAAM,2CAIK,IAAjBwG,GAAuBA,IAAgBA,EAAe,GAE7B,iBAAnB,GACNpH,KAAKqH,SAAWjF,EAAY,IAC5BpC,KAAKsH,SAASF,IAGdpH,KAAKuH,SAASH,IAItBD,EAAQlF,UAAUqF,SAAW,SAASlG,GAClC,GAAsB,iBAAZ,GAAwBC,SAASD,IAAUA,EACjD,MAAM,IAAIR,MAAM,8CAGpB,IAAK,IAAI6E,EAAQ,GAAa,GAATA,IAAcA,EAC/BzF,KAAKqH,SAAS5B,GAASrE,EAAQ,IAC/BA,IAAiB,GAIzB+F,EAAQlF,UAAUsF,SAAW,SAAShE,GAGlC,GAAoB,KAFpBA,EAAQ/B,EAAY+B,GAAO,IAEjBvC,OACN,MAAM,IAAIJ,MAAM,iDAGpBZ,KAAKqH,SAAW9D,GAGpB4D,EAAQlF,UAAUuF,UAAY,WAC1B,IAAK,IAAI7G,EAAI,GAAS,GAALA,EAAQA,IAAK,CAC1B,GAAyB,MAArBX,KAAKqH,SAAS1G,GAEX,CACHX,KAAKqH,SAAS1G,KACd,MAHAX,KAAKqH,SAAS1G,GAAK,IAY/B,IAAI8G,EAAqB,SAASvC,EAAKwC,GACnC,KAAM1H,gBAAgByH,GAClB,MAAM7G,MAAM,uCAGhBZ,KAAKoG,YAAc,UACnBpG,KAAK8B,KAAO,MAEN4F,aAAmBP,IACrBO,EAAU,IAAIP,EAAQO,IAG1B1H,KAAKqH,SAAWK,EAEhB1H,KAAK2H,kBAAoB,KACzB3H,KAAK4H,uBAAyB,GAE9B5H,KAAKqG,KAAO,IAAIpB,EAAIC,IAGxBuC,EAAmBxF,UAAU8D,QAAU,SAASC,GAG5C,IAFA,IAAIe,EAAYvF,EAAYwE,GAAW,GAE9BrF,EAAI,EAAGA,EAAIoG,EAAU/F,OAAQL,IACE,KAAhCX,KAAK4H,yBACL5H,KAAK2H,kBAAoB3H,KAAKqG,KAAKN,QAAQ/F,KAAKqH,SAASA,UACzDrH,KAAK4H,uBAAyB,EAC9B5H,KAAKqH,SAASG,aAElBT,EAAUpG,IAAMX,KAAK2H,kBAAkB3H,KAAK4H,0BAGhD,OAAOb,GAIXU,EAAmBxF,UAAUgE,QAAUwB,EAAmBxF,UAAU8D,QA0CpE,IAAI8B,EAAQ,CACR5C,IAAKA,EACLkC,QAASA,EAETW,gBAAiB,CACbC,IAAK5B,EACL6B,IAAKzB,EACL0B,IAAKtB,EACLuB,IAAKlB,EACLmB,IAAKV,GAGTW,MAAO,CACHC,IAAK1E,EACL2E,KAAMzF,GAGV0F,QAAS,CACLC,MAAO,CACHC,IAtDZ,SAAkBC,GAEd,IAAIC,EAAS,IADbD,EAAOlH,EAAYkH,GAAM,IACD1H,OAAS,GAC7BgC,EAASZ,EAAYsG,EAAK1H,OAAS2H,GACvCtG,EAAUqG,EAAM1F,GAChB,IAAK,IAAIrC,EAAI+H,EAAK1H,OAAQL,EAAIqC,EAAOhC,OAAQL,IACzCqC,EAAOrC,GAAKgI,EAEhB,OAAO3F,GA+CC4F,MA5CZ,SAAoBF,GAEhB,IADAA,EAAOlH,EAAYkH,GAAM,IAChB1H,OAAS,GAAM,MAAM,IAAIJ,MAAM,yBAExC,IAAI+H,EAASD,EAAKA,EAAK1H,OAAS,GAChC,GAAa,GAAT2H,EAAe,MAAM,IAAI/H,MAAM,oCAGnC,IADA,IAAII,EAAS0H,EAAK1H,OAAS2H,EAClBhI,EAAI,EAAGA,EAAIgI,EAAQhI,IACxB,GAAI+H,EAAK1H,EAASL,KAAOgI,EACrB,MAAM,IAAI/H,MAAM,+BAIxB,IAAIoC,EAASZ,EAAYpB,GAEzB,OADAqB,EAAUqG,EAAM1F,EAAQ,EAAG,EAAGhC,GACvBgC,KAgCP6F,WAAY,CACRrH,YAAaA,EACbY,YAAaA,EACbC,UAAWA,SAMI,IAAZ5C,EACPC,EAAOD,QAAUoI,GAYb3G,EAAK2G,QACLA,EAAMiB,OAAS5H,EAAK2G,OAGxB3G,EAAK2G,MAAQA,GAvxBrB,CA2xBG7H,OAED,IAAI+I,EAAE,CAAC,SAASrI,EAAQhB,EAAOD,IACjC,SAAWC,EAAQD,GACjB,aAGA,SAASuJ,EAAQC,EAAKC,GACpB,IAAKD,EAAK,MAAM,IAAIrI,MAAMsI,GAAO,oBAKnC,SAASC,EAAUC,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIE,EAAW,aACfA,EAAStH,UAAYoH,EAAUpH,UAC/BmH,EAAKnH,UAAY,IAAIsH,EACrBH,EAAKnH,UAAUuH,YAAcJ,EAK/B,SAASK,EAAIC,EAAQC,EAAMC,GACzB,GAAIH,EAAGI,KAAKH,GACV,OAAOA,EAGT1J,KAAK8J,SAAW,EAChB9J,KAAK+J,MAAQ,KACb/J,KAAKgB,OAAS,GAGdhB,KAAKgK,IAAM,QAEPN,IACW,OAATC,GAA0B,OAATA,IACnBC,EAASD,EACTA,EAAO,IAGT3J,KAAKiK,MAAMP,GAAU,EAAGC,GAAQ,GAAIC,GAAU,OAYlD,IAAIM,EATkB,iBAAXxK,EACTA,EAAOD,QAAUgK,EAEjBhK,EAAQgK,GAAKA,GAGfA,EAAGA,GAAKA,GACLU,SAAW,GAGd,IACED,EAASxJ,EAAQ,UAAUwJ,OAC3B,MAAOhK,IAoIT,SAASkK,EAAUC,EAAKC,EAAOC,GAG7B,IAFA,IAAIlK,EAAI,EACJmK,EAAMC,KAAKC,IAAIL,EAAIrJ,OAAQuJ,GACtB5J,EAAI2J,EAAO3J,EAAI6J,EAAK7J,IAAK,CAChC,IAAIuC,EAAImH,EAAIlH,WAAWxC,GAAK,GAE5BN,IAAM,EAIJA,GADO,IAAL6C,GAAWA,GAAK,GACbA,EAAI,GAAK,GAGA,IAALA,GAAWA,GAAK,GACpBA,EAAI,GAAK,GAIL,GAAJA,EAGT,OAAO7C,EAiCT,SAASsK,EAAWN,EAAKC,EAAOC,EAAKK,GAGnC,IAFA,IAAIvK,EAAI,EACJmK,EAAMC,KAAKC,IAAIL,EAAIrJ,OAAQuJ,GACtB5J,EAAI2J,EAAO3J,EAAI6J,EAAK7J,IAAK,CAChC,IAAIuC,EAAImH,EAAIlH,WAAWxC,GAAK,GAE5BN,GAAKuK,EAIHvK,GADO,IAAL6C,EACGA,EAAI,GAAK,GAGA,IAALA,EACJA,EAAI,GAAK,GAITA,EAGT,OAAO7C,EA5MToJ,EAAGI,KAAO,SAAegB,GACvB,OAAIA,aAAepB,GAIJ,OAARoB,GAA+B,iBAARA,GAC5BA,EAAIrB,YAAYW,WAAaV,EAAGU,UAAYnI,MAAME,QAAQ2I,EAAId,QAGlEN,EAAGqB,IAAM,SAAcC,EAAMC,GAC3B,OAAsB,EAAlBD,EAAKE,IAAID,GAAmBD,EACzBC,GAGTvB,EAAGiB,IAAM,SAAcK,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGTvB,EAAGxH,UAAUgI,MAAQ,SAAeP,EAAQC,EAAMC,GAChD,GAAsB,iBAAXF,EACT,OAAO1J,KAAKkL,YAAYxB,EAAQC,EAAMC,GAGxC,GAAsB,iBAAXF,EACT,OAAO1J,KAAKmL,WAAWzB,EAAQC,EAAMC,GAG1B,QAATD,IACFA,EAAO,IAETX,EAAOW,KAAiB,EAAPA,IAAqB,GAARA,GAAaA,GAAQ,IAGnD,IAAIW,EAAQ,EACM,OAFlBZ,EAASA,EAAO0B,WAAWC,QAAQ,OAAQ,KAEhC,IACTf,IAGW,KAATX,EACF3J,KAAKsL,UAAU5B,EAAQY,GAEvBtK,KAAKuL,WAAW7B,EAAQC,EAAMW,GAGd,MAAdZ,EAAO,KACT1J,KAAK8J,SAAW,GAGlB9J,KAAK4I,QAEU,OAAXgB,GAEJ5J,KAAKmL,WAAWnL,KAAKwL,UAAW7B,EAAMC,IAGxCH,EAAGxH,UAAUiJ,YAAc,SAAsBxB,EAAQC,EAAMC,GACzDF,EAAS,IACX1J,KAAK8J,SAAW,EAChBJ,GAAUA,GAERA,EAAS,UACX1J,KAAK+J,MAAQ,CAAW,SAATL,GACf1J,KAAKgB,OAAS,GACL0I,EAAS,kBAClB1J,KAAK+J,MAAQ,CACF,SAATL,EACCA,EAAS,SAAa,UAEzB1J,KAAKgB,OAAS,IAEdgI,EAAOU,EAAS,kBAChB1J,KAAK+J,MAAQ,CACF,SAATL,EACCA,EAAS,SAAa,SACvB,GAEF1J,KAAKgB,OAAS,GAGD,OAAX4I,GAGJ5J,KAAKmL,WAAWnL,KAAKwL,UAAW7B,EAAMC,IAGxCH,EAAGxH,UAAUkJ,WAAa,SAAqBzB,EAAQC,EAAMC,GAG3D,GADAZ,EAAgC,iBAAlBU,EAAO1I,QACjB0I,EAAO1I,QAAU,EAGnB,OAFAhB,KAAK+J,MAAQ,CAAE,GACf/J,KAAKgB,OAAS,EACPhB,KAGTA,KAAKgB,OAASyJ,KAAKgB,KAAK/B,EAAO1I,OAAS,GACxChB,KAAK+J,MAAQ,IAAI/H,MAAMhC,KAAKgB,QAC5B,IAAK,IAAIL,EAAI,EAAGA,EAAIX,KAAKgB,OAAQL,IAC/BX,KAAK+J,MAAMpJ,GAAK,EAGlB,IAAI+F,EAAGgF,EACHC,EAAM,EACV,GAAe,OAAX/B,EACF,IAAKjJ,EAAI+I,EAAO1I,OAAS,EAAG0F,EAAI,EAAQ,GAAL/F,EAAQA,GAAK,EAC9C+K,EAAIhC,EAAO/I,GAAM+I,EAAO/I,EAAI,IAAM,EAAM+I,EAAO/I,EAAI,IAAM,GACzDX,KAAK+J,MAAMrD,IAAOgF,GAAKC,EAAO,SAC9B3L,KAAK+J,MAAMrD,EAAI,GAAMgF,IAAO,GAAKC,EAAQ,SAE9B,KADXA,GAAO,MAELA,GAAO,GACPjF,UAGC,GAAe,OAAXkD,EACT,IAAYlD,EAAP/F,EAAI,EAAUA,EAAI+I,EAAO1I,OAAQL,GAAK,EACzC+K,EAAIhC,EAAO/I,GAAM+I,EAAO/I,EAAI,IAAM,EAAM+I,EAAO/I,EAAI,IAAM,GACzDX,KAAK+J,MAAMrD,IAAOgF,GAAKC,EAAO,SAC9B3L,KAAK+J,MAAMrD,EAAI,GAAMgF,IAAO,GAAKC,EAAQ,SAE9B,KADXA,GAAO,MAELA,GAAO,GACPjF,KAIN,OAAO1G,KAAK4I,SA2Bda,EAAGxH,UAAUqJ,UAAY,SAAoB5B,EAAQY,GAEnDtK,KAAKgB,OAASyJ,KAAKgB,MAAM/B,EAAO1I,OAASsJ,GAAS,GAClDtK,KAAK+J,MAAQ,IAAI/H,MAAMhC,KAAKgB,QAC5B,IAAK,IAAIL,EAAI,EAAGA,EAAIX,KAAKgB,OAAQL,IAC/BX,KAAK+J,MAAMpJ,GAAK,EAGlB,IAAI+F,EAAGgF,EAEHC,EAAM,EACV,IAAKhL,EAAI+I,EAAO1I,OAAS,EAAG0F,EAAI,EAAQ4D,GAAL3J,EAAYA,GAAK,EAClD+K,EAAItB,EAASV,EAAQ/I,EAAGA,EAAI,GAC5BX,KAAK+J,MAAMrD,IAAOgF,GAAKC,EAAO,SAE9B3L,KAAK+J,MAAMrD,EAAI,IAAMgF,IAAO,GAAKC,EAAO,QAE7B,KADXA,GAAO,MAELA,GAAO,GACPjF,KAGA/F,EAAI,IAAM2J,IACZoB,EAAItB,EAASV,EAAQY,EAAO3J,EAAI,GAChCX,KAAK+J,MAAMrD,IAAOgF,GAAKC,EAAO,SAC9B3L,KAAK+J,MAAMrD,EAAI,IAAMgF,IAAO,GAAKC,EAAO,SAE1C3L,KAAK4I,SA2BPa,EAAGxH,UAAUsJ,WAAa,SAAqB7B,EAAQC,EAAMW,GAE3DtK,KAAK+J,MAAQ,CAAE,GAIf,IAAK,IAAI6B,EAAU,EAAGC,EAHtB7L,KAAKgB,OAAS,EAGqB6K,GAAW,SAAWA,GAAWlC,EAClEiC,IAEFA,IACAC,EAAWA,EAAUlC,EAAQ,EAO7B,IALA,IAAImC,EAAQpC,EAAO1I,OAASsJ,EACxByB,EAAMD,EAAQF,EACdrB,EAAME,KAAKC,IAAIoB,EAAOA,EAAQC,GAAOzB,EAErC0B,EAAO,EACFrL,EAAI2J,EAAO3J,EAAI4J,EAAK5J,GAAKiL,EAChCI,EAAOrB,EAAUjB,EAAQ/I,EAAGA,EAAIiL,EAASjC,GAEzC3J,KAAKiM,MAAMJ,GACP7L,KAAK+J,MAAM,GAAKiC,EAAO,SACzBhM,KAAK+J,MAAM,IAAMiC,EAEjBhM,KAAKkM,OAAOF,GAIhB,GAAY,IAARD,EAAW,CACb,IAAII,EAAM,EAGV,IAFAH,EAAOrB,EAAUjB,EAAQ/I,EAAG+I,EAAO1I,OAAQ2I,GAEtChJ,EAAI,EAAGA,EAAIoL,EAAKpL,IACnBwL,GAAOxC,EAGT3J,KAAKiM,MAAME,GACPnM,KAAK+J,MAAM,GAAKiC,EAAO,SACzBhM,KAAK+J,MAAM,IAAMiC,EAEjBhM,KAAKkM,OAAOF,KAKlBvC,EAAGxH,UAAUP,KAAO,SAAe0K,GACjCA,EAAKrC,MAAQ,IAAI/H,MAAMhC,KAAKgB,QAC5B,IAAK,IAAIL,EAAI,EAAGA,EAAIX,KAAKgB,OAAQL,IAC/ByL,EAAKrC,MAAMpJ,GAAKX,KAAK+J,MAAMpJ,GAE7ByL,EAAKpL,OAAShB,KAAKgB,OACnBoL,EAAKtC,SAAW9J,KAAK8J,SACrBsC,EAAKpC,IAAMhK,KAAKgK,KAGlBP,EAAGxH,UAAUoK,MAAQ,WACnB,IAAIhM,EAAI,IAAIoJ,EAAG,MAEf,OADAzJ,KAAK0B,KAAKrB,GACHA,GAGToJ,EAAGxH,UAAUqK,QAAU,SAAkBC,GACvC,KAAOvM,KAAKgB,OAASuL,GACnBvM,KAAK+J,MAAM/J,KAAKgB,UAAY,EAE9B,OAAOhB,MAITyJ,EAAGxH,UAAU2G,MAAQ,WACnB,KAAqB,EAAd5I,KAAKgB,QAA8C,IAAhChB,KAAK+J,MAAM/J,KAAKgB,OAAS,IACjDhB,KAAKgB,SAEP,OAAOhB,KAAKwM,aAGd/C,EAAGxH,UAAUuK,UAAY,WAKvB,OAHoB,IAAhBxM,KAAKgB,QAAkC,IAAlBhB,KAAK+J,MAAM,KAClC/J,KAAK8J,SAAW,GAEX9J,MAGTyJ,EAAGxH,UAAUwK,QAAU,WACrB,OAAQzM,KAAKgK,IAAM,UAAY,SAAWhK,KAAKoL,SAAS,IAAM,KAiChE,IAAIsB,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAsjB9D,SAASC,EAAY9M,EAAM8K,EAAKiC,GAC9BA,EAAIhD,SAAWe,EAAIf,SAAW/J,EAAK+J,SACnC,IAAIU,EAAOzK,EAAKiB,OAAS6J,EAAI7J,OAAU,EAEvCwJ,GADAsC,EAAI9L,OAASwJ,GACA,EAAK,EAGlB,IAAI/J,EAAoB,EAAhBV,EAAKgK,MAAM,GACfgD,EAAmB,EAAflC,EAAId,MAAM,GACd1J,EAAII,EAAIsM,EAERC,EAAS,SAAJ3M,EACL4M,EAAS5M,EAAI,SAAa,EAC9ByM,EAAI/C,MAAM,GAAKiD,EAEf,IAAK,IAAIE,EAAI,EAAGA,EAAI1C,EAAK0C,IAAK,CAM5B,IAHA,IAAIC,EAASF,IAAU,GACnBG,EAAgB,SAARH,EACRI,EAAO5C,KAAKC,IAAIwC,EAAGrC,EAAI7J,OAAS,GAC3B0F,EAAI+D,KAAKK,IAAI,EAAGoC,EAAInN,EAAKiB,OAAS,GAAI0F,GAAK2G,EAAM3G,IAAK,CAC7D,IAAI/F,EAAKuM,EAAIxG,EAAK,EAIlByG,IADA9M,GAFAI,EAAoB,EAAhBV,EAAKgK,MAAMpJ,KACfoM,EAAmB,EAAflC,EAAId,MAAMrD,IACF0G,GACG,SAAa,EAC5BA,EAAY,SAAJ/M,EAEVyM,EAAI/C,MAAMmD,GAAa,EAARE,EACfH,EAAiB,EAATE,EAQV,OANc,IAAVF,EACFH,EAAI/C,MAAMmD,GAAa,EAARD,EAEfH,EAAI9L,SAGC8L,EAAIlE,QAzlBba,EAAGxH,UAAUmJ,SAAW,SAAmBzB,EAAMpB,GAI/C,IAAIuE,EACJ,GAHAvE,EAAoB,EAAVA,GAAe,EAGZ,MAJboB,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjCmD,EAAM,GAGN,IAFA,IAAInB,EAAM,EACNsB,EAAQ,EACHtM,EAAI,EAAGA,EAAIX,KAAKgB,OAAQL,IAAK,CACpC,IAAI+K,EAAI1L,KAAK+J,MAAMpJ,GACfqL,GAA+B,UAArBN,GAAKC,EAAOsB,IAAmB7B,SAAS,IAGpD0B,EADY,KADdG,EAASvB,IAAO,GAAKC,EAAQ,WACVhL,IAAMX,KAAKgB,OAAS,EAC/B0L,EAAM,EAAIV,EAAKhL,QAAUgL,EAAOc,EAEhCd,EAAOc,EAGJ,KADXnB,GAAO,KAELA,GAAO,GACPhL,KAMJ,IAHc,IAAVsM,IACFH,EAAMG,EAAM7B,SAAS,IAAM0B,GAEtBA,EAAI9L,OAASuH,GAAY,GAC9BuE,EAAM,IAAMA,EAKd,OAHsB,IAAlB9M,KAAK8J,WACPgD,EAAM,IAAMA,GAEPA,EAGT,GAAInD,KAAiB,EAAPA,IAAqB,GAARA,GAAaA,GAAQ,GAAI,CAElD,IAAI2D,EAAYX,EAAWhD,GAEvB4D,EAAYX,EAAWjD,GAC3BmD,EAAM,GACN,IAAI5J,EAAIlD,KAAKqM,QAEb,IADAnJ,EAAE4G,SAAW,GACL5G,EAAEsK,UAAU,CAClB,IAAInN,EAAI6C,EAAEuK,KAAKF,GAAWnC,SAASzB,GAMjCmD,GALF5J,EAAIA,EAAEwK,MAAMH,IAELC,SAGCnN,EAAIyM,EAFJJ,EAAMY,EAAYjN,EAAEW,QAAUX,EAAIyM,EAQ5C,IAHI9M,KAAKwN,WACPV,EAAM,IAAMA,GAEPA,EAAI9L,OAASuH,GAAY,GAC9BuE,EAAM,IAAMA,EAKd,OAHsB,IAAlB9M,KAAK8J,WACPgD,EAAM,IAAMA,GAEPA,EAGT9D,GAAO,EAAO,oCAGhBS,EAAGxH,UAAU0L,SAAW,WACtB,IAAIC,EAAM5N,KAAK+J,MAAM,GASrB,OARoB,IAAhB/J,KAAKgB,OACP4M,GAAuB,SAAhB5N,KAAK+J,MAAM,GACO,IAAhB/J,KAAKgB,QAAkC,IAAlBhB,KAAK+J,MAAM,GAEzC6D,GAAO,iBAAoC,SAAhB5N,KAAK+J,MAAM,GACf,EAAd/J,KAAKgB,QACdgI,GAAO,EAAO,8CAEU,IAAlBhJ,KAAK8J,UAAmB8D,EAAMA,GAGxCnE,EAAGxH,UAAU4L,OAAS,WACpB,OAAO7N,KAAKoL,SAAS,KAGvB3B,EAAGxH,UAAU6L,SAAW,SAAmBlE,EAAQ5I,GAEjD,OADAgI,OAAyB,IAAXkB,GACPlK,KAAK+N,YAAY7D,EAAQN,EAAQ5I,IAG1CyI,EAAGxH,UAAUuJ,QAAU,SAAkB5B,EAAQ5I,GAC/C,OAAOhB,KAAK+N,YAAY/L,MAAO4H,EAAQ5I,IAGzCyI,EAAGxH,UAAU8L,YAAc,SAAsBC,EAAWpE,EAAQ5I,GAClE,IAAIiN,EAAajO,KAAKiO,aAClBC,EAAYlN,GAAUyJ,KAAKK,IAAI,EAAGmD,GACtCjF,EAAOiF,GAAcC,EAAW,yCAChClF,EAAmB,EAAZkF,EAAe,+BAEtBlO,KAAK4I,QACL,IAGImE,EAAGpM,EAHHwN,EAA0B,OAAXvE,EACfwE,EAAM,IAAIJ,EAAUE,GAGpBG,EAAIrO,KAAKqM,QACb,GAAK8B,EAYE,CACL,IAAKxN,EAAI,GAAI0N,EAAEb,SAAU7M,IACvBoM,EAAIsB,EAAEC,MAAM,KACZD,EAAEE,OAAO,GAETH,EAAIzN,GAAKoM,EAGX,KAAOpM,EAAIuN,EAAWvN,IACpByN,EAAIzN,GAAK,MArBM,CAEjB,IAAKA,EAAI,EAAGA,EAAIuN,EAAYD,EAAYtN,IACtCyN,EAAIzN,GAAK,EAGX,IAAKA,EAAI,GAAI0N,EAAEb,SAAU7M,IACvBoM,EAAIsB,EAAEC,MAAM,KACZD,EAAEE,OAAO,GAETH,EAAIF,EAAYvN,EAAI,GAAKoM,EAe7B,OAAOqB,GAIP3E,EAAGxH,UAAUuM,WADX/D,KAAKgE,MACmB,SAAqB/C,GAC7C,OAAO,GAAKjB,KAAKgE,MAAM/C,IAGC,SAAqBA,GAC7C,IAAIvL,EAAIuL,EACJrL,EAAI,EAiBR,OAhBS,MAALF,IACFE,GAAK,GACLF,KAAO,IAEA,IAALA,IACFE,GAAK,EACLF,KAAO,GAEA,GAALA,IACFE,GAAK,EACLF,KAAO,GAEA,GAALA,IACFE,GAAK,EACLF,KAAO,GAEFE,EAAIF,GAIfsJ,EAAGxH,UAAUyM,UAAY,SAAoBhD,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAIvL,EAAIuL,EACJrL,EAAI,EAoBR,OAnBqB,IAAZ,KAAJF,KACHE,GAAK,GACLF,KAAO,IAEU,IAAV,IAAJA,KACHE,GAAK,EACLF,KAAO,GAES,IAAT,GAAJA,KACHE,GAAK,EACLF,KAAO,GAES,IAAT,EAAJA,KACHE,GAAK,EACLF,KAAO,GAES,IAAT,EAAJA,IACHE,IAEKA,GAIToJ,EAAGxH,UAAU0M,UAAY,WACvB,IAAIjD,EAAI1L,KAAK+J,MAAM/J,KAAKgB,OAAS,GAC7B4N,EAAK5O,KAAKwO,WAAW9C,GACzB,OAA2B,IAAnB1L,KAAKgB,OAAS,GAAU4N,GAiBlCnF,EAAGxH,UAAU4M,SAAW,WACtB,GAAI7O,KAAKwN,SAAU,OAAO,EAG1B,IADA,IAAInN,EAAI,EACCM,EAAI,EAAGA,EAAIX,KAAKgB,OAAQL,IAAK,CACpC,IAAIoM,EAAI/M,KAAK0O,UAAU1O,KAAK+J,MAAMpJ,IAElC,GADAN,GAAK0M,EACK,KAANA,EAAU,MAEhB,OAAO1M,GAGToJ,EAAGxH,UAAUgM,WAAa,WACxB,OAAOxD,KAAKgB,KAAKzL,KAAK2O,YAAc,IAGtClF,EAAGxH,UAAU6M,OAAS,SAAiBC,GACrC,OAAsB,IAAlB/O,KAAK8J,SACA9J,KAAKgP,MAAMC,MAAMF,GAAOG,MAAM,GAEhClP,KAAKqM,SAGd5C,EAAGxH,UAAUkN,SAAW,SAAmBJ,GACzC,OAAI/O,KAAKoP,MAAML,EAAQ,GACd/O,KAAKqP,KAAKN,GAAOG,MAAM,GAAGI,OAE5BtP,KAAKqM,SAGd5C,EAAGxH,UAAUsN,MAAQ,WACnB,OAAyB,IAAlBvP,KAAK8J,UAIdL,EAAGxH,UAAUuN,IAAM,WACjB,OAAOxP,KAAKqM,QAAQiD,QAGtB7F,EAAGxH,UAAUqN,KAAO,WAKlB,OAJKtP,KAAKwN,WACRxN,KAAK8J,UAAY,GAGZ9J,MAITyJ,EAAGxH,UAAUwN,KAAO,SAAe5E,GACjC,KAAO7K,KAAKgB,OAAS6J,EAAI7J,QACvBhB,KAAK+J,MAAM/J,KAAKgB,UAAY,EAG9B,IAAK,IAAIL,EAAI,EAAGA,EAAIkK,EAAI7J,OAAQL,IAC9BX,KAAK+J,MAAMpJ,GAAKX,KAAK+J,MAAMpJ,GAAKkK,EAAId,MAAMpJ,GAG5C,OAAOX,KAAK4I,SAGda,EAAGxH,UAAUyN,IAAM,SAAc7E,GAE/B,OADA7B,EAA0C,IAAlChJ,KAAK8J,SAAWe,EAAIf,WACrB9J,KAAKyP,KAAK5E,IAInBpB,EAAGxH,UAAU0N,GAAK,SAAa9E,GAC7B,OAAI7K,KAAKgB,OAAS6J,EAAI7J,OAAehB,KAAKqM,QAAQqD,IAAI7E,GAC/CA,EAAIwB,QAAQqD,IAAI1P,OAGzByJ,EAAGxH,UAAU2N,IAAM,SAAc/E,GAC/B,OAAI7K,KAAKgB,OAAS6J,EAAI7J,OAAehB,KAAKqM,QAAQoD,KAAK5E,GAChDA,EAAIwB,QAAQoD,KAAKzP,OAI1ByJ,EAAGxH,UAAU4N,MAAQ,SAAgBhF,GAEnC,IAAIkC,EAEFA,EADE/M,KAAKgB,OAAS6J,EAAI7J,OAChB6J,EAEA7K,KAGN,IAAK,IAAIW,EAAI,EAAGA,EAAIoM,EAAE/L,OAAQL,IAC5BX,KAAK+J,MAAMpJ,GAAKX,KAAK+J,MAAMpJ,GAAKkK,EAAId,MAAMpJ,GAK5C,OAFAX,KAAKgB,OAAS+L,EAAE/L,OAEThB,KAAK4I,SAGda,EAAGxH,UAAU6N,KAAO,SAAejF,GAEjC,OADA7B,EAA0C,IAAlChJ,KAAK8J,SAAWe,EAAIf,WACrB9J,KAAK6P,MAAMhF,IAIpBpB,EAAGxH,UAAU8N,IAAM,SAAclF,GAC/B,OAAI7K,KAAKgB,OAAS6J,EAAI7J,OAAehB,KAAKqM,QAAQyD,KAAKjF,GAChDA,EAAIwB,QAAQyD,KAAK9P,OAG1ByJ,EAAGxH,UAAU+N,KAAO,SAAenF,GACjC,OAAI7K,KAAKgB,OAAS6J,EAAI7J,OAAehB,KAAKqM,QAAQwD,MAAMhF,GACjDA,EAAIwB,QAAQwD,MAAM7P,OAI3ByJ,EAAGxH,UAAUgO,MAAQ,SAAgBpF,GAEnC,IAAIpK,EACAsM,EACA/M,KAAKgB,OAAS6J,EAAI7J,QACpBP,EAAIT,KACJ+M,EAAIlC,IAEJpK,EAAIoK,EACJkC,EAAI/M,MAGN,IAAK,IAAIW,EAAI,EAAGA,EAAIoM,EAAE/L,OAAQL,IAC5BX,KAAK+J,MAAMpJ,GAAKF,EAAEsJ,MAAMpJ,GAAKoM,EAAEhD,MAAMpJ,GAGvC,GAAIX,OAASS,EACX,KAAOE,EAAIF,EAAEO,OAAQL,IACnBX,KAAK+J,MAAMpJ,GAAKF,EAAEsJ,MAAMpJ,GAM5B,OAFAX,KAAKgB,OAASP,EAAEO,OAEThB,KAAK4I,SAGda,EAAGxH,UAAUiO,KAAO,SAAerF,GAEjC,OADA7B,EAA0C,IAAlChJ,KAAK8J,SAAWe,EAAIf,WACrB9J,KAAKiQ,MAAMpF,IAIpBpB,EAAGxH,UAAUkO,IAAM,SAActF,GAC/B,OAAI7K,KAAKgB,OAAS6J,EAAI7J,OAAehB,KAAKqM,QAAQ6D,KAAKrF,GAChDA,EAAIwB,QAAQ6D,KAAKlQ,OAG1ByJ,EAAGxH,UAAUmO,KAAO,SAAevF,GACjC,OAAI7K,KAAKgB,OAAS6J,EAAI7J,OAAehB,KAAKqM,QAAQ4D,MAAMpF,GACjDA,EAAIwB,QAAQ4D,MAAMjQ,OAI3ByJ,EAAGxH,UAAUgN,MAAQ,SAAgBF,GACnC/F,EAAwB,iBAAV+F,GAA+B,GAATA,GAEpC,IAAIsB,EAAsC,EAAxB5F,KAAKgB,KAAKsD,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvB/O,KAAKsM,QAAQ+D,GAEE,EAAXC,GACFD,IAIF,IAAK,IAAI1P,EAAI,EAAGA,EAAI0P,EAAa1P,IAC/BX,KAAK+J,MAAMpJ,GAAsB,UAAhBX,KAAK+J,MAAMpJ,GAS9B,OALe,EAAX2P,IACFtQ,KAAK+J,MAAMpJ,IAAMX,KAAK+J,MAAMpJ,GAAM,UAAc,GAAK2P,GAIhDtQ,KAAK4I,SAGda,EAAGxH,UAAUoN,KAAO,SAAeN,GACjC,OAAO/O,KAAKqM,QAAQ4C,MAAMF,IAI5BtF,EAAGxH,UAAUsO,KAAO,SAAeC,EAAKvH,GACtCD,EAAsB,iBAARwH,GAA2B,GAAPA,GAElC,IAAI7E,EAAO6E,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAxQ,KAAKsM,QAAQX,EAAM,GAGjB3L,KAAK+J,MAAM4B,GADT1C,EACgBjJ,KAAK+J,MAAM4B,GAAQ,GAAK8E,EAExBzQ,KAAK+J,MAAM4B,KAAS,GAAK8E,GAGtCzQ,KAAK4I,SAIda,EAAGxH,UAAUyO,KAAO,SAAe7F,GACjC,IAAIxK,EAkBAI,EAAGsM,EAfP,GAAsB,IAAlB/M,KAAK8J,UAAmC,IAAjBe,EAAIf,SAI7B,OAHA9J,KAAK8J,SAAW,EAChBzJ,EAAIL,KAAK2Q,KAAK9F,GACd7K,KAAK8J,UAAY,EACV9J,KAAKwM,YAGP,GAAsB,IAAlBxM,KAAK8J,UAAmC,IAAjBe,EAAIf,SAIpC,OAHAe,EAAIf,SAAW,EACfzJ,EAAIL,KAAK2Q,KAAK9F,GACdA,EAAIf,SAAW,EACRzJ,EAAEmM,YAKPxM,KAAKgB,OAAS6J,EAAI7J,QACpBP,EAAIT,KACJ+M,EAAIlC,IAEJpK,EAAIoK,EACJkC,EAAI/M,MAIN,IADA,IAAIiN,EAAQ,EACHtM,EAAI,EAAGA,EAAIoM,EAAE/L,OAAQL,IAC5BN,GAAkB,EAAbI,EAAEsJ,MAAMpJ,KAAwB,EAAboM,EAAEhD,MAAMpJ,IAAUsM,EAC1CjN,KAAK+J,MAAMpJ,GAAS,SAAJN,EAChB4M,EAAQ5M,IAAM,GAEhB,KAAiB,IAAV4M,GAAetM,EAAIF,EAAEO,OAAQL,IAClCN,GAAkB,EAAbI,EAAEsJ,MAAMpJ,IAAUsM,EACvBjN,KAAK+J,MAAMpJ,GAAS,SAAJN,EAChB4M,EAAQ5M,IAAM,GAIhB,GADAL,KAAKgB,OAASP,EAAEO,OACF,IAAViM,EACFjN,KAAK+J,MAAM/J,KAAKgB,QAAUiM,EAC1BjN,KAAKgB,cAEA,GAAIP,IAAMT,KACf,KAAOW,EAAIF,EAAEO,OAAQL,IACnBX,KAAK+J,MAAMpJ,GAAKF,EAAEsJ,MAAMpJ,GAI5B,OAAOX,MAITyJ,EAAGxH,UAAU2O,IAAM,SAAc/F,GAC/B,IAAIuD,EACJ,OAAqB,IAAjBvD,EAAIf,UAAoC,IAAlB9J,KAAK8J,UAC7Be,EAAIf,SAAW,EACfsE,EAAMpO,KAAK6Q,IAAIhG,GACfA,EAAIf,UAAY,EACTsE,GACmB,IAAjBvD,EAAIf,UAAoC,IAAlB9J,KAAK8J,UACpC9J,KAAK8J,SAAW,EAChBsE,EAAMvD,EAAIgG,IAAI7Q,MACdA,KAAK8J,SAAW,EACTsE,GAGLpO,KAAKgB,OAAS6J,EAAI7J,OAAehB,KAAKqM,QAAQqE,KAAK7F,GAEhDA,EAAIwB,QAAQqE,KAAK1Q,OAI1ByJ,EAAGxH,UAAU0O,KAAO,SAAe9F,GAEjC,GAAqB,IAAjBA,EAAIf,SAAgB,CACtBe,EAAIf,SAAW,EACf,IAAIzJ,EAAIL,KAAK0Q,KAAK7F,GAElB,OADAA,EAAIf,SAAW,EACRzJ,EAAEmM,YAGJ,GAAsB,IAAlBxM,KAAK8J,SAId,OAHA9J,KAAK8J,SAAW,EAChB9J,KAAK0Q,KAAK7F,GACV7K,KAAK8J,SAAW,EACT9J,KAAKwM,YAId,IAWI/L,EAAGsM,EAXH9B,EAAMjL,KAAKiL,IAAIJ,GAGnB,GAAY,IAARI,EAIF,OAHAjL,KAAK8J,SAAW,EAChB9J,KAAKgB,OAAS,EACdhB,KAAK+J,MAAM,GAAK,EACT/J,KAKC,EAANiL,GACFxK,EAAIT,KACJ+M,EAAIlC,IAEJpK,EAAIoK,EACJkC,EAAI/M,MAIN,IADA,IAAIiN,EAAQ,EACHtM,EAAI,EAAGA,EAAIoM,EAAE/L,OAAQL,IAE5BsM,GADA5M,GAAkB,EAAbI,EAAEsJ,MAAMpJ,KAAwB,EAAboM,EAAEhD,MAAMpJ,IAAUsM,IAC7B,GACbjN,KAAK+J,MAAMpJ,GAAS,SAAJN,EAElB,KAAiB,IAAV4M,GAAetM,EAAIF,EAAEO,OAAQL,IAElCsM,GADA5M,GAAkB,EAAbI,EAAEsJ,MAAMpJ,IAAUsM,IACV,GACbjN,KAAK+J,MAAMpJ,GAAS,SAAJN,EAIlB,GAAc,IAAV4M,GAAetM,EAAIF,EAAEO,QAAUP,IAAMT,KACvC,KAAOW,EAAIF,EAAEO,OAAQL,IACnBX,KAAK+J,MAAMpJ,GAAKF,EAAEsJ,MAAMpJ,GAU5B,OANAX,KAAKgB,OAASyJ,KAAKK,IAAI9K,KAAKgB,OAAQL,GAEhCF,IAAMT,OACRA,KAAK8J,SAAW,GAGX9J,KAAK4I,SAIda,EAAGxH,UAAU4O,IAAM,SAAchG,GAC/B,OAAO7K,KAAKqM,QAAQsE,KAAK9F,IA+C3B,IAAIiG,EAAc,SAAsB/Q,EAAM8K,EAAKiC,GACjD,IAIIE,EACA+D,EACAnC,EANAnO,EAAIV,EAAKgK,MACTgD,EAAIlC,EAAId,MACRxJ,EAAIuM,EAAI/C,MACR7G,EAAI,EAIJ8N,EAAY,EAAPvQ,EAAE,GACPwQ,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP1Q,EAAE,GACP2Q,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP7Q,EAAE,GACP8Q,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPhR,EAAE,GACPiR,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPnR,EAAE,GACPoR,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPtR,EAAE,GACPuR,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPzR,EAAE,GACP0R,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP5R,EAAE,GACP6R,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP/R,EAAE,GACPgS,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlS,EAAE,GACPmS,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP/F,EAAE,GACPgG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlG,EAAE,GACPmG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrG,EAAE,GACPsG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxG,EAAE,GACPyG,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3G,EAAE,GACP4G,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAP9G,EAAE,GACP+G,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPjH,EAAE,GACPkH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPpH,EAAE,GACPqH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPvH,EAAE,GACPwH,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP1H,EAAE,GACP2H,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjB3H,EAAIhD,SAAW/J,EAAK+J,SAAWe,EAAIf,SACnCgD,EAAI9L,OAAS,GAMb,IAAI4T,IAAQ1R,GAJZ8J,EAAKvC,KAAKoK,KAAK5D,EAAK8B,IAIE,KAAa,MAFnChC,GADAA,EAAMtG,KAAKoK,KAAK5D,EAAK+B,IACRvI,KAAKoK,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrD7P,IAFA0L,EAAKnE,KAAKoK,KAAK3D,EAAK8B,KAEPjC,IAAQ,IAAO,IAAM6D,KAAO,IAAO,EAChDA,IAAM,SAEN5H,EAAKvC,KAAKoK,KAAKzD,EAAK2B,GAEpBhC,GADAA,EAAMtG,KAAKoK,KAAKzD,EAAK4B,IACRvI,KAAKoK,KAAKxD,EAAK0B,GAAQ,EACpCnE,EAAKnE,KAAKoK,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQ5R,GAJZ8J,EAAMA,EAAKvC,KAAKoK,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCnC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK5D,EAAKkC,GAAQ,GACvB1I,KAAKoK,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrDhQ,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK3D,EAAKiC,GAAQ,IAErBpC,IAAQ,IAAO,IAAM+D,KAAO,IAAO,EAChDA,IAAM,SAEN9H,EAAKvC,KAAKoK,KAAKtD,EAAKwB,GAEpBhC,GADAA,EAAMtG,KAAKoK,KAAKtD,EAAKyB,IACRvI,KAAKoK,KAAKrD,EAAKuB,GAAQ,EACpCnE,EAAKnE,KAAKoK,KAAKrD,EAAKwB,GACpBhG,EAAMA,EAAKvC,KAAKoK,KAAKzD,EAAK8B,GAAQ,EAElCnC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKzD,EAAK+B,GAAQ,GACvB1I,KAAKoK,KAAKxD,EAAK6B,GAAQ,EACpCtE,EAAMA,EAAKnE,KAAKoK,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQ7R,GAJZ8J,EAAMA,EAAKvC,KAAKoK,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCtC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK5D,EAAKqC,GAAQ,GACvB7I,KAAKoK,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrDnQ,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK3D,EAAKoC,GAAQ,IAErBvC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAEN/H,EAAKvC,KAAKoK,KAAKnD,EAAKqB,GAEpBhC,GADAA,EAAMtG,KAAKoK,KAAKnD,EAAKsB,IACRvI,KAAKoK,KAAKlD,EAAKoB,GAAQ,EACpCnE,EAAKnE,KAAKoK,KAAKlD,EAAKqB,GACpBhG,EAAMA,EAAKvC,KAAKoK,KAAKtD,EAAK2B,GAAQ,EAElCnC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKtD,EAAK4B,GAAQ,GACvB1I,KAAKoK,KAAKrD,EAAK0B,GAAQ,EACpCtE,EAAMA,EAAKnE,KAAKoK,KAAKrD,EAAK2B,GAAQ,EAClCnG,EAAMA,EAAKvC,KAAKoK,KAAKzD,EAAKiC,GAAQ,EAElCtC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKzD,EAAKkC,GAAQ,GACvB7I,KAAKoK,KAAKxD,EAAKgC,GAAQ,EACpCzE,EAAMA,EAAKnE,KAAKoK,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQ9R,GAJZ8J,EAAMA,EAAKvC,KAAKoK,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnCzC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK5D,EAAKwC,GAAQ,GACvBhJ,KAAKoK,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrDtQ,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK3D,EAAKuC,GAAQ,IAErB1C,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAENhI,EAAKvC,KAAKoK,KAAKhD,EAAKkB,GAEpBhC,GADAA,EAAMtG,KAAKoK,KAAKhD,EAAKmB,IACRvI,KAAKoK,KAAK/C,EAAKiB,GAAQ,EACpCnE,EAAKnE,KAAKoK,KAAK/C,EAAKkB,GACpBhG,EAAMA,EAAKvC,KAAKoK,KAAKnD,EAAKwB,GAAQ,EAElCnC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKnD,EAAKyB,GAAQ,GACvB1I,KAAKoK,KAAKlD,EAAKuB,GAAQ,EACpCtE,EAAMA,EAAKnE,KAAKoK,KAAKlD,EAAKwB,GAAQ,EAClCnG,EAAMA,EAAKvC,KAAKoK,KAAKtD,EAAK8B,GAAQ,EAElCtC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKtD,EAAK+B,GAAQ,GACvB7I,KAAKoK,KAAKrD,EAAK6B,GAAQ,EACpCzE,EAAMA,EAAKnE,KAAKoK,KAAKrD,EAAK8B,GAAQ,EAClCtG,EAAMA,EAAKvC,KAAKoK,KAAKzD,EAAKoC,GAAQ,EAElCzC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKzD,EAAKqC,GAAQ,GACvBhJ,KAAKoK,KAAKxD,EAAKmC,GAAQ,EACpC5E,EAAMA,EAAKnE,KAAKoK,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQ/R,GAJZ8J,EAAMA,EAAKvC,KAAKoK,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC5C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK5D,EAAK2C,IAAQ,GACvBnJ,KAAKoK,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrDzQ,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK3D,EAAK0C,IAAQ,IAErB7C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAENjI,EAAKvC,KAAKoK,KAAK7C,EAAKe,GAEpBhC,GADAA,EAAMtG,KAAKoK,KAAK7C,EAAKgB,IACRvI,KAAKoK,KAAK5C,EAAKc,GAAQ,EACpCnE,EAAKnE,KAAKoK,KAAK5C,EAAKe,GACpBhG,EAAMA,EAAKvC,KAAKoK,KAAKhD,EAAKqB,GAAQ,EAElCnC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKhD,EAAKsB,GAAQ,GACvB1I,KAAKoK,KAAK/C,EAAKoB,GAAQ,EACpCtE,EAAMA,EAAKnE,KAAKoK,KAAK/C,EAAKqB,GAAQ,EAClCnG,EAAMA,EAAKvC,KAAKoK,KAAKnD,EAAK2B,GAAQ,EAElCtC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKnD,EAAK4B,GAAQ,GACvB7I,KAAKoK,KAAKlD,EAAK0B,GAAQ,EACpCzE,EAAMA,EAAKnE,KAAKoK,KAAKlD,EAAK2B,GAAQ,EAClCtG,EAAMA,EAAKvC,KAAKoK,KAAKtD,EAAKiC,GAAQ,EAElCzC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKtD,EAAKkC,GAAQ,GACvBhJ,KAAKoK,KAAKrD,EAAKgC,GAAQ,EACpC5E,EAAMA,EAAKnE,KAAKoK,KAAKrD,EAAKiC,GAAQ,EAClCzG,EAAMA,EAAKvC,KAAKoK,KAAKzD,EAAKuC,GAAQ,EAElC5C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKzD,EAAKwC,IAAQ,GACvBnJ,KAAKoK,KAAKxD,EAAKsC,GAAQ,EACpC/E,EAAMA,EAAKnE,KAAKoK,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQhS,GAJZ8J,EAAMA,EAAKvC,KAAKoK,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnC/C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK5D,EAAK8C,IAAQ,GACvBtJ,KAAKoK,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrD5Q,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK3D,EAAK6C,IAAQ,IAErBhD,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAENlI,EAAKvC,KAAKoK,KAAK1C,EAAKY,GAEpBhC,GADAA,EAAMtG,KAAKoK,KAAK1C,EAAKa,IACRvI,KAAKoK,KAAKzC,EAAKW,GAAQ,EACpCnE,EAAKnE,KAAKoK,KAAKzC,EAAKY,GACpBhG,EAAMA,EAAKvC,KAAKoK,KAAK7C,EAAKkB,GAAQ,EAElCnC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK7C,EAAKmB,GAAQ,GACvB1I,KAAKoK,KAAK5C,EAAKiB,GAAQ,EACpCtE,EAAMA,EAAKnE,KAAKoK,KAAK5C,EAAKkB,GAAQ,EAClCnG,EAAMA,EAAKvC,KAAKoK,KAAKhD,EAAKwB,GAAQ,EAElCtC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKhD,EAAKyB,GAAQ,GACvB7I,KAAKoK,KAAK/C,EAAKuB,GAAQ,EACpCzE,EAAMA,EAAKnE,KAAKoK,KAAK/C,EAAKwB,GAAQ,EAClCtG,EAAMA,EAAKvC,KAAKoK,KAAKnD,EAAK8B,GAAQ,EAElCzC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKnD,EAAK+B,GAAQ,GACvBhJ,KAAKoK,KAAKlD,EAAK6B,GAAQ,EACpC5E,EAAMA,EAAKnE,KAAKoK,KAAKlD,EAAK8B,GAAQ,EAClCzG,EAAMA,EAAKvC,KAAKoK,KAAKtD,EAAKoC,GAAQ,EAElC5C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKtD,EAAKqC,IAAQ,GACvBnJ,KAAKoK,KAAKrD,EAAKmC,GAAQ,EACpC/E,EAAMA,EAAKnE,KAAKoK,KAAKrD,EAAKoC,IAAQ,EAClC5G,EAAMA,EAAKvC,KAAKoK,KAAKzD,EAAK0C,IAAQ,EAElC/C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKzD,EAAK2C,IAAQ,GACvBtJ,KAAKoK,KAAKxD,EAAKyC,IAAQ,EACpClF,EAAMA,EAAKnE,KAAKoK,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQjS,GAJZ8J,EAAMA,EAAKvC,KAAKoK,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnClD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK5D,EAAKiD,IAAQ,GACvBzJ,KAAKoK,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrD/Q,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK3D,EAAKgD,IAAQ,IAErBnD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAENnI,EAAKvC,KAAKoK,KAAKvC,EAAKS,GAEpBhC,GADAA,EAAMtG,KAAKoK,KAAKvC,EAAKU,IACRvI,KAAKoK,KAAKtC,EAAKQ,GAAQ,EACpCnE,EAAKnE,KAAKoK,KAAKtC,EAAKS,GACpBhG,EAAMA,EAAKvC,KAAKoK,KAAK1C,EAAKe,GAAQ,EAElCnC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK1C,EAAKgB,GAAQ,GACvB1I,KAAKoK,KAAKzC,EAAKc,GAAQ,EACpCtE,EAAMA,EAAKnE,KAAKoK,KAAKzC,EAAKe,GAAQ,EAClCnG,EAAMA,EAAKvC,KAAKoK,KAAK7C,EAAKqB,GAAQ,EAElCtC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK7C,EAAKsB,GAAQ,GACvB7I,KAAKoK,KAAK5C,EAAKoB,GAAQ,EACpCzE,EAAMA,EAAKnE,KAAKoK,KAAK5C,EAAKqB,GAAQ,EAClCtG,EAAMA,EAAKvC,KAAKoK,KAAKhD,EAAK2B,GAAQ,EAElCzC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKhD,EAAK4B,GAAQ,GACvBhJ,KAAKoK,KAAK/C,EAAK0B,GAAQ,EACpC5E,EAAMA,EAAKnE,KAAKoK,KAAK/C,EAAK2B,GAAQ,EAClCzG,EAAMA,EAAKvC,KAAKoK,KAAKnD,EAAKiC,GAAQ,EAElC5C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKnD,EAAKkC,IAAQ,GACvBnJ,KAAKoK,KAAKlD,EAAKgC,GAAQ,EACpC/E,EAAMA,EAAKnE,KAAKoK,KAAKlD,EAAKiC,IAAQ,EAClC5G,EAAMA,EAAKvC,KAAKoK,KAAKtD,EAAKuC,IAAQ,EAElC/C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKtD,EAAKwC,IAAQ,GACvBtJ,KAAKoK,KAAKrD,EAAKsC,IAAQ,EACpClF,EAAMA,EAAKnE,KAAKoK,KAAKrD,EAAKuC,IAAQ,EAClC/G,EAAMA,EAAKvC,KAAKoK,KAAKzD,EAAK6C,IAAQ,EAElClD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKzD,EAAK8C,IAAQ,GACvBzJ,KAAKoK,KAAKxD,EAAK4C,IAAQ,EACpCrF,EAAMA,EAAKnE,KAAKoK,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQlS,GAJZ8J,EAAMA,EAAKvC,KAAKoK,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCrD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK5D,EAAKoD,IAAQ,GACvB5J,KAAKoK,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrDlR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK3D,EAAKmD,IAAQ,IAErBtD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAENpI,EAAKvC,KAAKoK,KAAKpC,EAAKM,GAEpBhC,GADAA,EAAMtG,KAAKoK,KAAKpC,EAAKO,IACRvI,KAAKoK,KAAKnC,EAAKK,GAAQ,EACpCnE,EAAKnE,KAAKoK,KAAKnC,EAAKM,GACpBhG,EAAMA,EAAKvC,KAAKoK,KAAKvC,EAAKY,GAAQ,EAElCnC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKvC,EAAKa,GAAQ,GACvB1I,KAAKoK,KAAKtC,EAAKW,GAAQ,EACpCtE,EAAMA,EAAKnE,KAAKoK,KAAKtC,EAAKY,GAAQ,EAClCnG,EAAMA,EAAKvC,KAAKoK,KAAK1C,EAAKkB,GAAQ,EAElCtC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK1C,EAAKmB,GAAQ,GACvB7I,KAAKoK,KAAKzC,EAAKiB,GAAQ,EACpCzE,EAAMA,EAAKnE,KAAKoK,KAAKzC,EAAKkB,GAAQ,EAClCtG,EAAMA,EAAKvC,KAAKoK,KAAK7C,EAAKwB,GAAQ,EAElCzC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK7C,EAAKyB,GAAQ,GACvBhJ,KAAKoK,KAAK5C,EAAKuB,GAAQ,EACpC5E,EAAMA,EAAKnE,KAAKoK,KAAK5C,EAAKwB,GAAQ,EAClCzG,EAAMA,EAAKvC,KAAKoK,KAAKhD,EAAK8B,GAAQ,EAElC5C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKhD,EAAK+B,IAAQ,GACvBnJ,KAAKoK,KAAK/C,EAAK6B,GAAQ,EACpC/E,EAAMA,EAAKnE,KAAKoK,KAAK/C,EAAK8B,IAAQ,EAClC5G,EAAMA,EAAKvC,KAAKoK,KAAKnD,EAAKoC,IAAQ,EAElC/C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKnD,EAAKqC,IAAQ,GACvBtJ,KAAKoK,KAAKlD,EAAKmC,IAAQ,EACpClF,EAAMA,EAAKnE,KAAKoK,KAAKlD,EAAKoC,IAAQ,EAClC/G,EAAMA,EAAKvC,KAAKoK,KAAKtD,EAAK0C,IAAQ,EAElClD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKtD,EAAK2C,IAAQ,GACvBzJ,KAAKoK,KAAKrD,EAAKyC,IAAQ,EACpCrF,EAAMA,EAAKnE,KAAKoK,KAAKrD,EAAK0C,IAAQ,EAClClH,EAAMA,EAAKvC,KAAKoK,KAAKzD,EAAKgD,IAAQ,EAElCrD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKzD,EAAKiD,IAAQ,GACvB5J,KAAKoK,KAAKxD,EAAK+C,IAAQ,EACpCxF,EAAMA,EAAKnE,KAAKoK,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQnS,GAJZ8J,EAAMA,EAAKvC,KAAKoK,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCxD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK5D,EAAKuD,IAAQ,GACvB/J,KAAKoK,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrDrR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK3D,EAAKsD,IAAQ,IAErBzD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAENrI,EAAKvC,KAAKoK,KAAKjC,EAAKG,GAEpBhC,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAKI,IACRvI,KAAKoK,KAAKhC,EAAKE,GAAQ,EACpCnE,EAAKnE,KAAKoK,KAAKhC,EAAKG,GACpBhG,EAAMA,EAAKvC,KAAKoK,KAAKpC,EAAKS,GAAQ,EAElCnC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKpC,EAAKU,GAAQ,GACvB1I,KAAKoK,KAAKnC,EAAKQ,GAAQ,EACpCtE,EAAMA,EAAKnE,KAAKoK,KAAKnC,EAAKS,GAAQ,EAClCnG,EAAMA,EAAKvC,KAAKoK,KAAKvC,EAAKe,GAAQ,EAElCtC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKvC,EAAKgB,GAAQ,GACvB7I,KAAKoK,KAAKtC,EAAKc,GAAQ,EACpCzE,EAAMA,EAAKnE,KAAKoK,KAAKtC,EAAKe,GAAQ,EAClCtG,EAAMA,EAAKvC,KAAKoK,KAAK1C,EAAKqB,GAAQ,EAElCzC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK1C,EAAKsB,GAAQ,GACvBhJ,KAAKoK,KAAKzC,EAAKoB,GAAQ,EACpC5E,EAAMA,EAAKnE,KAAKoK,KAAKzC,EAAKqB,GAAQ,EAClCzG,EAAMA,EAAKvC,KAAKoK,KAAK7C,EAAK2B,GAAQ,EAElC5C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK7C,EAAK4B,IAAQ,GACvBnJ,KAAKoK,KAAK5C,EAAK0B,GAAQ,EACpC/E,EAAMA,EAAKnE,KAAKoK,KAAK5C,EAAK2B,IAAQ,EAClC5G,EAAMA,EAAKvC,KAAKoK,KAAKhD,EAAKiC,IAAQ,EAElC/C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKhD,EAAKkC,IAAQ,GACvBtJ,KAAKoK,KAAK/C,EAAKgC,IAAQ,EACpClF,EAAMA,EAAKnE,KAAKoK,KAAK/C,EAAKiC,IAAQ,EAClC/G,EAAMA,EAAKvC,KAAKoK,KAAKnD,EAAKuC,IAAQ,EAElClD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKnD,EAAKwC,IAAQ,GACvBzJ,KAAKoK,KAAKlD,EAAKsC,IAAQ,EACpCrF,EAAMA,EAAKnE,KAAKoK,KAAKlD,EAAKuC,IAAQ,EAClClH,EAAMA,EAAKvC,KAAKoK,KAAKtD,EAAK6C,IAAQ,EAElCrD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKtD,EAAK8C,IAAQ,GACvB5J,KAAKoK,KAAKrD,EAAK4C,IAAQ,EACpCxF,EAAMA,EAAKnE,KAAKoK,KAAKrD,EAAK6C,IAAQ,EAClCrH,EAAMA,EAAKvC,KAAKoK,KAAKzD,EAAKmD,IAAQ,EAElCxD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKzD,EAAKoD,IAAQ,GACvB/J,KAAKoK,KAAKxD,EAAKkD,IAAQ,EACpC3F,EAAMA,EAAKnE,KAAKoK,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQpS,GAJZ8J,EAAMA,EAAKvC,KAAKoK,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC3D,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK5D,EAAK0D,IAAQ,GACvBlK,KAAKoK,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDxR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK3D,EAAKyD,IAAQ,IAErB5D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAENtI,EAAKvC,KAAKoK,KAAKjC,EAAKM,GAEpBnC,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAKO,IACR1I,KAAKoK,KAAKhC,EAAKK,GAAQ,EACpCtE,EAAKnE,KAAKoK,KAAKhC,EAAKM,GACpBnG,EAAMA,EAAKvC,KAAKoK,KAAKpC,EAAKY,GAAQ,EAElCtC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKpC,EAAKa,GAAQ,GACvB7I,KAAKoK,KAAKnC,EAAKW,GAAQ,EACpCzE,EAAMA,EAAKnE,KAAKoK,KAAKnC,EAAKY,GAAQ,EAClCtG,EAAMA,EAAKvC,KAAKoK,KAAKvC,EAAKkB,GAAQ,EAElCzC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKvC,EAAKmB,GAAQ,GACvBhJ,KAAKoK,KAAKtC,EAAKiB,GAAQ,EACpC5E,EAAMA,EAAKnE,KAAKoK,KAAKtC,EAAKkB,GAAQ,EAClCzG,EAAMA,EAAKvC,KAAKoK,KAAK1C,EAAKwB,GAAQ,EAElC5C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK1C,EAAKyB,IAAQ,GACvBnJ,KAAKoK,KAAKzC,EAAKuB,GAAQ,EACpC/E,EAAMA,EAAKnE,KAAKoK,KAAKzC,EAAKwB,IAAQ,EAClC5G,EAAMA,EAAKvC,KAAKoK,KAAK7C,EAAK8B,IAAQ,EAElC/C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK7C,EAAK+B,IAAQ,GACvBtJ,KAAKoK,KAAK5C,EAAK6B,IAAQ,EACpClF,EAAMA,EAAKnE,KAAKoK,KAAK5C,EAAK8B,IAAQ,EAClC/G,EAAMA,EAAKvC,KAAKoK,KAAKhD,EAAKoC,IAAQ,EAElClD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKhD,EAAKqC,IAAQ,GACvBzJ,KAAKoK,KAAK/C,EAAKmC,IAAQ,EACpCrF,EAAMA,EAAKnE,KAAKoK,KAAK/C,EAAKoC,IAAQ,EAClClH,EAAMA,EAAKvC,KAAKoK,KAAKnD,EAAK0C,IAAQ,EAElCrD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKnD,EAAK2C,IAAQ,GACvB5J,KAAKoK,KAAKlD,EAAKyC,IAAQ,EACpCxF,EAAMA,EAAKnE,KAAKoK,KAAKlD,EAAK0C,IAAQ,EAClCrH,EAAMA,EAAKvC,KAAKoK,KAAKtD,EAAKgD,IAAQ,EAElCxD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKtD,EAAKiD,IAAQ,GACvB/J,KAAKoK,KAAKrD,EAAK+C,IAAQ,EACpC3F,EAAMA,EAAKnE,KAAKoK,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAASrS,GAJb8J,EAAMA,EAAKvC,KAAKoK,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKzD,EAAKuD,IAAQ,GACvBlK,KAAKoK,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDxR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAKxD,EAAKsD,IAAQ,IAErB5D,IAAQ,IAAO,IAAMwE,KAAQ,IAAO,EACjDA,IAAO,SAEPvI,EAAKvC,KAAKoK,KAAKjC,EAAKS,GAEpBtC,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAKU,IACR7I,KAAKoK,KAAKhC,EAAKQ,GAAQ,EACpCzE,EAAKnE,KAAKoK,KAAKhC,EAAKS,GACpBtG,EAAMA,EAAKvC,KAAKoK,KAAKpC,EAAKe,GAAQ,EAElCzC,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKpC,EAAKgB,GAAQ,GACvBhJ,KAAKoK,KAAKnC,EAAKc,GAAQ,EACpC5E,EAAMA,EAAKnE,KAAKoK,KAAKnC,EAAKe,GAAQ,EAClCzG,EAAMA,EAAKvC,KAAKoK,KAAKvC,EAAKqB,GAAQ,EAElC5C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKvC,EAAKsB,IAAQ,GACvBnJ,KAAKoK,KAAKtC,EAAKoB,GAAQ,EACpC/E,EAAMA,EAAKnE,KAAKoK,KAAKtC,EAAKqB,IAAQ,EAClC5G,EAAMA,EAAKvC,KAAKoK,KAAK1C,EAAK2B,IAAQ,EAElC/C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK1C,EAAK4B,IAAQ,GACvBtJ,KAAKoK,KAAKzC,EAAK0B,IAAQ,EACpClF,EAAMA,EAAKnE,KAAKoK,KAAKzC,EAAK2B,IAAQ,EAClC/G,EAAMA,EAAKvC,KAAKoK,KAAK7C,EAAKiC,IAAQ,EAElClD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK7C,EAAKkC,IAAQ,GACvBzJ,KAAKoK,KAAK5C,EAAKgC,IAAQ,EACpCrF,EAAMA,EAAKnE,KAAKoK,KAAK5C,EAAKiC,IAAQ,EAClClH,EAAMA,EAAKvC,KAAKoK,KAAKhD,EAAKuC,IAAQ,EAElCrD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKhD,EAAKwC,IAAQ,GACvB5J,KAAKoK,KAAK/C,EAAKsC,IAAQ,EACpCxF,EAAMA,EAAKnE,KAAKoK,KAAK/C,EAAKuC,IAAQ,EAClCrH,EAAMA,EAAKvC,KAAKoK,KAAKnD,EAAK6C,IAAQ,EAElCxD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKnD,EAAK8C,IAAQ,GACvB/J,KAAKoK,KAAKlD,EAAK4C,IAAQ,EACpC3F,EAAMA,EAAKnE,KAAKoK,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAAStS,GAJb8J,EAAMA,EAAKvC,KAAKoK,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKtD,EAAKoD,IAAQ,GACvBlK,KAAKoK,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDxR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAKrD,EAAKmD,IAAQ,IAErB5D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPxI,EAAKvC,KAAKoK,KAAKjC,EAAKY,GAEpBzC,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAKa,IACRhJ,KAAKoK,KAAKhC,EAAKW,GAAQ,EACpC5E,EAAKnE,KAAKoK,KAAKhC,EAAKY,GACpBzG,EAAMA,EAAKvC,KAAKoK,KAAKpC,EAAKkB,GAAQ,EAElC5C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKpC,EAAKmB,IAAQ,GACvBnJ,KAAKoK,KAAKnC,EAAKiB,GAAQ,EACpC/E,EAAMA,EAAKnE,KAAKoK,KAAKnC,EAAKkB,IAAQ,EAClC5G,EAAMA,EAAKvC,KAAKoK,KAAKvC,EAAKwB,IAAQ,EAElC/C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKvC,EAAKyB,IAAQ,GACvBtJ,KAAKoK,KAAKtC,EAAKuB,IAAQ,EACpClF,EAAMA,EAAKnE,KAAKoK,KAAKtC,EAAKwB,IAAQ,EAClC/G,EAAMA,EAAKvC,KAAKoK,KAAK1C,EAAK8B,IAAQ,EAElClD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK1C,EAAK+B,IAAQ,GACvBzJ,KAAKoK,KAAKzC,EAAK6B,IAAQ,EACpCrF,EAAMA,EAAKnE,KAAKoK,KAAKzC,EAAK8B,IAAQ,EAClClH,EAAMA,EAAKvC,KAAKoK,KAAK7C,EAAKoC,IAAQ,EAElCrD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK7C,EAAKqC,IAAQ,GACvB5J,KAAKoK,KAAK5C,EAAKmC,IAAQ,EACpCxF,EAAMA,EAAKnE,KAAKoK,KAAK5C,EAAKoC,IAAQ,EAClCrH,EAAMA,EAAKvC,KAAKoK,KAAKhD,EAAK0C,IAAQ,EAElCxD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKhD,EAAK2C,IAAQ,GACvB/J,KAAKoK,KAAK/C,EAAKyC,IAAQ,EACpC3F,EAAMA,EAAKnE,KAAKoK,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAASvS,GAJb8J,EAAMA,EAAKvC,KAAKoK,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKnD,EAAKiD,IAAQ,GACvBlK,KAAKoK,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDxR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAKlD,EAAKgD,IAAQ,IAErB5D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPzI,EAAKvC,KAAKoK,KAAKjC,EAAKe,GAEpB5C,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAKgB,KACRnJ,KAAKoK,KAAKhC,EAAKc,GAAQ,EACpC/E,EAAKnE,KAAKoK,KAAKhC,EAAKe,IACpB5G,EAAMA,EAAKvC,KAAKoK,KAAKpC,EAAKqB,IAAQ,EAElC/C,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKpC,EAAKsB,IAAQ,GACvBtJ,KAAKoK,KAAKnC,EAAKoB,IAAQ,EACpClF,EAAMA,EAAKnE,KAAKoK,KAAKnC,EAAKqB,IAAQ,EAClC/G,EAAMA,EAAKvC,KAAKoK,KAAKvC,EAAK2B,IAAQ,EAElClD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKvC,EAAK4B,IAAQ,GACvBzJ,KAAKoK,KAAKtC,EAAK0B,IAAQ,EACpCrF,EAAMA,EAAKnE,KAAKoK,KAAKtC,EAAK2B,IAAQ,EAClClH,EAAMA,EAAKvC,KAAKoK,KAAK1C,EAAKiC,IAAQ,EAElCrD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK1C,EAAKkC,IAAQ,GACvB5J,KAAKoK,KAAKzC,EAAKgC,IAAQ,EACpCxF,EAAMA,EAAKnE,KAAKoK,KAAKzC,EAAKiC,IAAQ,EAClCrH,EAAMA,EAAKvC,KAAKoK,KAAK7C,EAAKuC,IAAQ,EAElCxD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK7C,EAAKwC,IAAQ,GACvB/J,KAAKoK,KAAK5C,EAAKsC,IAAQ,EACpC3F,EAAMA,EAAKnE,KAAKoK,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASxS,GAJb8J,EAAMA,EAAKvC,KAAKoK,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKhD,EAAK8C,IAAQ,GACvBlK,KAAKoK,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDxR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK/C,EAAK6C,IAAQ,IAErB5D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEP1I,EAAKvC,KAAKoK,KAAKjC,EAAKkB,IAEpB/C,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAKmB,KACRtJ,KAAKoK,KAAKhC,EAAKiB,IAAQ,EACpClF,EAAKnE,KAAKoK,KAAKhC,EAAKkB,IACpB/G,EAAMA,EAAKvC,KAAKoK,KAAKpC,EAAKwB,IAAQ,EAElClD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKpC,EAAKyB,IAAQ,GACvBzJ,KAAKoK,KAAKnC,EAAKuB,IAAQ,EACpCrF,EAAMA,EAAKnE,KAAKoK,KAAKnC,EAAKwB,IAAQ,EAClClH,EAAMA,EAAKvC,KAAKoK,KAAKvC,EAAK8B,IAAQ,EAElCrD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKvC,EAAK+B,IAAQ,GACvB5J,KAAKoK,KAAKtC,EAAK6B,IAAQ,EACpCxF,EAAMA,EAAKnE,KAAKoK,KAAKtC,EAAK8B,IAAQ,EAClCrH,EAAMA,EAAKvC,KAAKoK,KAAK1C,EAAKoC,IAAQ,EAElCxD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK1C,EAAKqC,IAAQ,GACvB/J,KAAKoK,KAAKzC,EAAKmC,IAAQ,EACpC3F,EAAMA,EAAKnE,KAAKoK,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAASzS,GAJb8J,EAAMA,EAAKvC,KAAKoK,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK7C,EAAK2C,IAAQ,GACvBlK,KAAKoK,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDxR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAK5C,EAAK0C,IAAQ,IAErB5D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEP3I,EAAKvC,KAAKoK,KAAKjC,EAAKqB,IAEpBlD,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAKsB,KACRzJ,KAAKoK,KAAKhC,EAAKoB,IAAQ,EACpCrF,EAAKnE,KAAKoK,KAAKhC,EAAKqB,IACpBlH,EAAMA,EAAKvC,KAAKoK,KAAKpC,EAAK2B,IAAQ,EAElCrD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKpC,EAAK4B,IAAQ,GACvB5J,KAAKoK,KAAKnC,EAAK0B,IAAQ,EACpCxF,EAAMA,EAAKnE,KAAKoK,KAAKnC,EAAK2B,IAAQ,EAClCrH,EAAMA,EAAKvC,KAAKoK,KAAKvC,EAAKiC,IAAQ,EAElCxD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKvC,EAAKkC,IAAQ,GACvB/J,KAAKoK,KAAKtC,EAAKgC,IAAQ,EACpC3F,EAAMA,EAAKnE,KAAKoK,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAAS1S,GAJb8J,EAAMA,EAAKvC,KAAKoK,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMtG,KAAKoK,KAAK1C,EAAKwC,IAAQ,GACvBlK,KAAKoK,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDxR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAKzC,EAAKuC,IAAQ,IAErB5D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEP5I,EAAKvC,KAAKoK,KAAKjC,EAAKwB,IAEpBrD,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAKyB,KACR5J,KAAKoK,KAAKhC,EAAKuB,IAAQ,EACpCxF,EAAKnE,KAAKoK,KAAKhC,EAAKwB,IACpBrH,EAAMA,EAAKvC,KAAKoK,KAAKpC,EAAK8B,IAAQ,EAElCxD,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKpC,EAAK+B,IAAQ,GACvB/J,KAAKoK,KAAKnC,EAAK6B,IAAQ,EACpC3F,EAAMA,EAAKnE,KAAKoK,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAAS3S,GAJb8J,EAAMA,EAAKvC,KAAKoK,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKvC,EAAKqC,IAAQ,GACvBlK,KAAKoK,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDxR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAKtC,EAAKoC,IAAQ,IAErB5D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEP7I,EAAKvC,KAAKoK,KAAKjC,EAAK2B,IAEpBxD,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAK4B,KACR/J,KAAKoK,KAAKhC,EAAK0B,IAAQ,EACpC3F,EAAKnE,KAAKoK,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAAS5S,GAJb8J,EAAMA,EAAKvC,KAAKoK,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC3D,GADAA,EAAOA,EAAMtG,KAAKoK,KAAKpC,EAAKkC,IAAQ,GACvBlK,KAAKoK,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDxR,IAFA0L,EAAMA,EAAKnE,KAAKoK,KAAKnC,EAAKiC,IAAQ,IAErB5D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAS7S,GAJb8J,EAAKvC,KAAKoK,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC3D,GADAA,EAAMtG,KAAKoK,KAAKjC,EAAK+B,KACRlK,KAAKoK,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAxR,IAFA0L,EAAKnE,KAAKoK,KAAKhC,EAAK8B,MAEP5D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SACPxV,EAAE,GAAKqU,GACPrU,EAAE,GAAKuU,GACPvU,EAAE,GAAKwU,GACPxU,EAAE,GAAKyU,GACPzU,EAAE,GAAK0U,GACP1U,EAAE,GAAK2U,GACP3U,EAAE,GAAK4U,GACP5U,EAAE,GAAK6U,GACP7U,EAAE,GAAK8U,GACP9U,EAAE,GAAK+U,GACP/U,EAAE,IAAMgV,GACRhV,EAAE,IAAMiV,GACRjV,EAAE,IAAMkV,GACRlV,EAAE,IAAMmV,GACRnV,EAAE,IAAMoV,GACRpV,EAAE,IAAMqV,GACRrV,EAAE,IAAMsV,GACRtV,EAAE,IAAMuV,GACRvV,EAAE,IAAMwV,GACE,IAAN7S,IACF3C,EAAE,IAAM2C,EACR4J,EAAI9L,UAEC8L,GAiDT,SAASkJ,EAAYjW,EAAM8K,EAAKiC,GAE9B,OADW,IAAImJ,GACHC,KAAKnW,EAAM8K,EAAKiC,GAsB9B,SAASmJ,EAAME,EAAGC,GAChBpW,KAAKmW,EAAIA,EACTnW,KAAKoW,EAAIA,EAvEN3L,KAAKoK,OACR/D,EAAcjE,GAiDhBpD,EAAGxH,UAAUoU,MAAQ,SAAgBxL,EAAKiC,GACxC,IACItC,EAAMxK,KAAKgB,OAAS6J,EAAI7J,OAW5B,OAVoB,KAAhBhB,KAAKgB,QAAgC,KAAf6J,EAAI7J,OACtB8P,EAAY9Q,KAAM6K,EAAKiC,GACpBtC,EAAM,GACTqC,EAAW7M,KAAM6K,EAAKiC,GACnBtC,EAAM,KArDnB,SAAmBzK,EAAM8K,EAAKiC,GAC5BA,EAAIhD,SAAWe,EAAIf,SAAW/J,EAAK+J,SACnCgD,EAAI9L,OAASjB,EAAKiB,OAAS6J,EAAI7J,OAI/B,IAFA,IAAIiM,EAAQ,EACRqJ,EAAU,EACLpJ,EAAI,EAAGA,EAAIJ,EAAI9L,OAAS,EAAGkM,IAAK,CAGvC,IAAIC,EAASmJ,EACbA,EAAU,EAGV,IAFA,IAAIlJ,EAAgB,SAARH,EACRI,EAAO5C,KAAKC,IAAIwC,EAAGrC,EAAI7J,OAAS,GAC3B0F,EAAI+D,KAAKK,IAAI,EAAGoC,EAAInN,EAAKiB,OAAS,GAAI0F,GAAK2G,EAAM3G,IAAK,CAC7D,IAAI/F,EAAIuM,EAAIxG,EAGRrG,GAFoB,EAAhBN,EAAKgK,MAAMpJ,KACI,EAAfkK,EAAId,MAAMrD,IAGdsG,EAAS,SAAJ3M,EAGT+M,EAAa,UADbJ,EAAMA,EAAKI,EAAS,GAIpBkJ,IAFAnJ,GAHAA,EAAUA,GAAW9M,EAAI,SAAa,GAAM,IAGxB2M,IAAO,IAAO,KAEZ,GACtBG,GAAU,SAEZL,EAAI/C,MAAMmD,GAAKE,EACfH,EAAQE,EACRA,EAASmJ,EAQX,OANc,IAAVrJ,EACFH,EAAI/C,MAAMmD,GAAKD,EAEfH,EAAI9L,SAGC8L,EAAIlE,QAgBH2N,CAASvW,KAAM6K,EAAKiC,GAEpBkJ,EAAWhW,KAAM6K,EAAKiC,IAchCmJ,EAAKhU,UAAUuU,QAAU,SAAkBC,GAGzC,IAFA,IAAItW,EAAI,IAAI6B,MAAMyU,GACd3V,EAAI2I,EAAGxH,UAAUuM,WAAWiI,GAAK,EAC5B9V,EAAI,EAAGA,EAAI8V,EAAG9V,IACrBR,EAAEQ,GAAKX,KAAK0W,OAAO/V,EAAGG,EAAG2V,GAG3B,OAAOtW,GAIT8V,EAAKhU,UAAUyU,OAAS,SAAiBP,EAAGrV,EAAG2V,GAC7C,GAAU,IAANN,GAAWA,IAAMM,EAAI,EAAG,OAAON,EAGnC,IADA,IAAIQ,EAAK,EACAhW,EAAI,EAAGA,EAAIG,EAAGH,IACrBgW,IAAW,EAAJR,IAAWrV,EAAIH,EAAI,EAC1BwV,IAAM,EAGR,OAAOQ,GAKTV,EAAKhU,UAAU2U,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAI9V,EAAI,EAAGA,EAAI8V,EAAG9V,IACrBqW,EAAKrW,GAAKmW,EAAID,EAAIlW,IAClBsW,EAAKtW,GAAKoW,EAAIF,EAAIlW,KAItBsV,EAAKhU,UAAUiV,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtE7W,KAAK4W,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAInW,EAAI,EAAGA,EAAImW,EAAGnW,IAAM,EAM3B,IALA,IAAIQ,EAAIR,GAAK,EAET6W,EAAQ1M,KAAK2M,IAAI,EAAI3M,KAAK4M,GAAKvW,GAC/BwW,EAAQ7M,KAAK8M,IAAI,EAAI9M,KAAK4M,GAAKvW,GAE1B0W,EAAI,EAAGA,EAAIf,EAAGe,GAAK1W,EAI1B,IAHA,IAAI2W,EAASN,EACTO,EAASJ,EAEJ5Q,EAAI,EAAGA,EAAIpG,EAAGoG,IAAK,CAC1B,IAAIiR,EAAKX,EAAKQ,EAAI9Q,GACdkR,EAAKX,EAAKO,EAAI9Q,GAEdmR,EAAKb,EAAKQ,EAAI9Q,EAAIpG,GAClBwX,EAAKb,EAAKO,EAAI9Q,EAAIpG,GAElByX,EAAKN,EAASI,EAAKH,EAASI,EAEhCA,EAAKL,EAASK,EAAKJ,EAASG,EAC5BA,EAAKE,EAELf,EAAKQ,EAAI9Q,GAAKiR,EAAKE,EACnBZ,EAAKO,EAAI9Q,GAAKkR,EAAKE,EAEnBd,EAAKQ,EAAI9Q,EAAIpG,GAAKqX,EAAKE,EACvBZ,EAAKO,EAAI9Q,EAAIpG,GAAKsX,EAAKE,EAGnBpR,IAAM5F,IACRiX,EAAKZ,EAAQM,EAASH,EAAQI,EAE9BA,EAASP,EAAQO,EAASJ,EAAQG,EAClCA,EAASM,KAOnB9B,EAAKhU,UAAU+V,YAAc,SAAsB5X,EAAG6X,GACpD,IAAIxB,EAAqB,EAAjBhM,KAAKK,IAAImN,EAAG7X,GAChB8X,EAAU,EAAJzB,EACN9V,EAAI,EACR,IAAK8V,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B9V,IAGF,OAAO,GAAKA,EAAI,EAAIuX,GAGtBjC,EAAKhU,UAAUkW,UAAY,SAAoBrB,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI9V,EAAI,EAAGA,EAAI8V,EAAI,EAAG9V,IAAK,CAC9B,IAAIR,EAAI2W,EAAInW,GAEZmW,EAAInW,GAAKmW,EAAIL,EAAI9V,EAAI,GACrBmW,EAAIL,EAAI9V,EAAI,GAAKR,EAEjBA,EAAI4W,EAAIpW,GAERoW,EAAIpW,IAAMoW,EAAIN,EAAI9V,EAAI,GACtBoW,EAAIN,EAAI9V,EAAI,IAAMR,IAItB8V,EAAKhU,UAAUmW,aAAe,SAAuBC,EAAI5B,GAEvD,IADA,IAAIxJ,EAAQ,EACHtM,EAAI,EAAGA,EAAI8V,EAAI,EAAG9V,IAAK,CAC9B,IAAI+K,EAAoC,KAAhCjB,KAAK6N,MAAMD,EAAG,EAAI1X,EAAI,GAAK8V,GACjChM,KAAK6N,MAAMD,EAAG,EAAI1X,GAAK8V,GACvBxJ,EAEFoL,EAAG1X,GAAS,SAAJ+K,EAGNuB,EADEvB,EAAI,SACE,EAEAA,EAAI,SAAY,EAI5B,OAAO2M,GAGTpC,EAAKhU,UAAUsW,WAAa,SAAqBF,EAAI7N,EAAKsM,EAAKL,GAE7D,IADA,IAAIxJ,EAAQ,EACHtM,EAAI,EAAGA,EAAI6J,EAAK7J,IACvBsM,GAAyB,EAARoL,EAAG1X,GAEpBmW,EAAI,EAAInW,GAAa,KAARsM,EAAgBA,KAAkB,GAC/C6J,EAAI,EAAInW,EAAI,GAAa,KAARsM,EAAgBA,KAAkB,GAIrD,IAAKtM,EAAI,EAAI6J,EAAK7J,EAAI8V,IAAK9V,EACzBmW,EAAInW,GAAK,EAGXqI,EAAiB,IAAViE,GACPjE,EAA6B,KAAb,KAARiE,KAGVgJ,EAAKhU,UAAUuW,KAAO,SAAe/B,GAEnC,IADA,IAAIgC,EAAK,IAAIzW,MAAMyU,GACV9V,EAAI,EAAGA,EAAI8V,EAAG9V,IACrB8X,EAAG9X,GAAK,EAGV,OAAO8X,GAGTxC,EAAKhU,UAAUiU,KAAO,SAAeC,EAAGC,EAAGtJ,GACzC,IAAI2J,EAAI,EAAIzW,KAAKgY,YAAY7B,EAAEnV,OAAQoV,EAAEpV,QAErC6V,EAAM7W,KAAKwW,QAAQC,GAEnBiC,EAAI1Y,KAAKwY,KAAK/B,GAEdK,EAAM,IAAI9U,MAAMyU,GAChBkC,EAAO,IAAI3W,MAAMyU,GACjBmC,EAAO,IAAI5W,MAAMyU,GAEjBoC,EAAO,IAAI7W,MAAMyU,GACjBqC,EAAQ,IAAI9W,MAAMyU,GAClBsC,EAAQ,IAAI/W,MAAMyU,GAElBuC,EAAOlM,EAAI/C,MACfiP,EAAKhY,OAASyV,EAEdzW,KAAKuY,WAAWpC,EAAEpM,MAAOoM,EAAEnV,OAAQ8V,EAAKL,GACxCzW,KAAKuY,WAAWnC,EAAErM,MAAOqM,EAAEpV,OAAQ6X,EAAMpC,GAEzCzW,KAAKkX,UAAUJ,EAAK4B,EAAGC,EAAMC,EAAMnC,EAAGI,GACtC7W,KAAKkX,UAAU2B,EAAMH,EAAGI,EAAOC,EAAOtC,EAAGI,GAEzC,IAAK,IAAIlW,EAAI,EAAGA,EAAI8V,EAAG9V,IAAK,CAC1B,IAAIoX,EAAKY,EAAKhY,GAAKmY,EAAMnY,GAAKiY,EAAKjY,GAAKoY,EAAMpY,GAC9CiY,EAAKjY,GAAKgY,EAAKhY,GAAKoY,EAAMpY,GAAKiY,EAAKjY,GAAKmY,EAAMnY,GAC/CgY,EAAKhY,GAAKoX,EAUZ,OAPA/X,KAAKmY,UAAUQ,EAAMC,EAAMnC,GAC3BzW,KAAKkX,UAAUyB,EAAMC,EAAMI,EAAMN,EAAGjC,EAAGI,GACvC7W,KAAKmY,UAAUa,EAAMN,EAAGjC,GACxBzW,KAAKoY,aAAaY,EAAMvC,GAExB3J,EAAIhD,SAAWqM,EAAErM,SAAWsM,EAAEtM,SAC9BgD,EAAI9L,OAASmV,EAAEnV,OAASoV,EAAEpV,OACnB8L,EAAIlE,SAIba,EAAGxH,UAAU2I,IAAM,SAAcC,GAC/B,IAAIiC,EAAM,IAAIrD,EAAG,MAEjB,OADAqD,EAAI/C,MAAQ,IAAI/H,MAAMhC,KAAKgB,OAAS6J,EAAI7J,QACjChB,KAAKqW,MAAMxL,EAAKiC,IAIzBrD,EAAGxH,UAAUgX,KAAO,SAAepO,GACjC,IAAIiC,EAAM,IAAIrD,EAAG,MAEjB,OADAqD,EAAI/C,MAAQ,IAAI/H,MAAMhC,KAAKgB,OAAS6J,EAAI7J,QACjCgV,EAAWhW,KAAM6K,EAAKiC,IAI/BrD,EAAGxH,UAAU4S,KAAO,SAAehK,GACjC,OAAO7K,KAAKqM,QAAQgK,MAAMxL,EAAK7K,OAGjCyJ,EAAGxH,UAAUgK,MAAQ,SAAgBpB,GACnC7B,EAAsB,iBAAR6B,GACd7B,EAAO6B,EAAM,UAIb,IADA,IAAIoC,EAAQ,EACHtM,EAAI,EAAGA,EAAIX,KAAKgB,OAAQL,IAAK,CACpC,IAAI+K,GAAqB,EAAhB1L,KAAK+J,MAAMpJ,IAAUkK,EAC1BmC,GAAU,SAAJtB,IAA0B,SAARuB,GAC5BA,IAAU,GACVA,GAAUvB,EAAI,SAAa,EAE3BuB,GAASD,IAAO,GAChBhN,KAAK+J,MAAMpJ,GAAU,SAALqM,EAQlB,OALc,IAAVC,IACFjN,KAAK+J,MAAMpJ,GAAKsM,EAChBjN,KAAKgB,UAGAhB,MAGTyJ,EAAGxH,UAAUiX,KAAO,SAAerO,GACjC,OAAO7K,KAAKqM,QAAQJ,MAAMpB,IAI5BpB,EAAGxH,UAAUkX,IAAM,WACjB,OAAOnZ,KAAK4K,IAAI5K,OAIlByJ,EAAGxH,UAAUmX,KAAO,WAClB,OAAOpZ,KAAK6U,KAAK7U,KAAKqM,UAIxB5C,EAAGxH,UAAUkK,IAAM,SAActB,GAC/B,IAAIa,EAxxCN,SAAqBb,GAGnB,IAFA,IAAIa,EAAI,IAAI1J,MAAM6I,EAAI8D,aAEb6B,EAAM,EAAGA,EAAM9E,EAAE1K,OAAQwP,IAAO,CACvC,IAAI7E,EAAO6E,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB9E,EAAE8E,IAAQ3F,EAAId,MAAM4B,GAAQ,GAAK8E,KAAWA,EAG9C,OAAO/E,EA8wCC2N,CAAWxO,GACnB,GAAiB,IAAba,EAAE1K,OAAc,OAAO,IAAIyI,EAAG,GAIlC,IADA,IAAI2E,EAAMpO,KACDW,EAAI,EAAGA,EAAI+K,EAAE1K,QACP,IAAT0K,EAAE/K,GADsBA,IAAKyN,EAAMA,EAAI+K,OAI7C,KAAMxY,EAAI+K,EAAE1K,OACV,IAAK,IAAIqN,EAAID,EAAI+K,MAAOxY,EAAI+K,EAAE1K,OAAQL,IAAK0N,EAAIA,EAAE8K,MAClC,IAATzN,EAAE/K,KAENyN,EAAMA,EAAIxD,IAAIyD,IAIlB,OAAOD,GAIT3E,EAAGxH,UAAUqX,OAAS,SAAiBC,GACrCvQ,EAAuB,iBAATuQ,GAA6B,GAARA,GACnC,IAGI5Y,EAHAN,EAAIkZ,EAAO,GACXjZ,GAAKiZ,EAAOlZ,GAAK,GACjBmZ,EAAa,WAAe,GAAKnZ,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAI4M,EAAQ,EAEZ,IAAKtM,EAAI,EAAGA,EAAIX,KAAKgB,OAAQL,IAAK,CAChC,IAAI8Y,EAAWzZ,KAAK+J,MAAMpJ,GAAK6Y,EAC3BtW,GAAsB,EAAhBlD,KAAK+J,MAAMpJ,IAAU8Y,GAAapZ,EAC5CL,KAAK+J,MAAMpJ,GAAKuC,EAAI+J,EACpBA,EAAQwM,IAAc,GAAKpZ,EAGzB4M,IACFjN,KAAK+J,MAAMpJ,GAAKsM,EAChBjN,KAAKgB,UAIT,GAAU,IAANV,EAAS,CACX,IAAKK,EAAIX,KAAKgB,OAAS,EAAQ,GAALL,EAAQA,IAChCX,KAAK+J,MAAMpJ,EAAIL,GAAKN,KAAK+J,MAAMpJ,GAGjC,IAAKA,EAAI,EAAGA,EAAIL,EAAGK,IACjBX,KAAK+J,MAAMpJ,GAAK,EAGlBX,KAAKgB,QAAUV,EAGjB,OAAON,KAAK4I,SAGda,EAAGxH,UAAUyX,MAAQ,SAAgBH,GAGnC,OADAvQ,EAAyB,IAAlBhJ,KAAK8J,UACL9J,KAAKsZ,OAAOC,IAMrB9P,EAAGxH,UAAUsM,OAAS,SAAiBgL,EAAMI,EAAMC,GAEjD,IAAIC,EADJ7Q,EAAuB,iBAATuQ,GAA6B,GAARA,GAGjCM,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAItZ,EAAIkZ,EAAO,GACXjZ,EAAImK,KAAKC,KAAK6O,EAAOlZ,GAAK,GAAIL,KAAKgB,QACnC8Y,EAAO,SAAc,WAAczZ,GAAMA,EACzC0Z,EAAcH,EAMlB,GAJAC,GAAKvZ,EACLuZ,EAAIpP,KAAKK,IAAI,EAAG+O,GAGZE,EAAa,CACf,IAAK,IAAIpZ,EAAI,EAAGA,EAAIL,EAAGK,IACrBoZ,EAAYhQ,MAAMpJ,GAAKX,KAAK+J,MAAMpJ,GAEpCoZ,EAAY/Y,OAASV,EAGvB,GAAU,IAANA,QAEG,GAAIN,KAAKgB,OAASV,EAEvB,IADAN,KAAKgB,QAAUV,EACVK,EAAI,EAAGA,EAAIX,KAAKgB,OAAQL,IAC3BX,KAAK+J,MAAMpJ,GAAKX,KAAK+J,MAAMpJ,EAAIL,QAGjCN,KAAK+J,MAAM,GAAK,EAChB/J,KAAKgB,OAAS,EAGhB,IAAIiM,EAAQ,EACZ,IAAKtM,EAAIX,KAAKgB,OAAS,EAAQ,GAALL,IAAqB,IAAVsM,GAAoB4M,GAALlZ,GAASA,IAAK,CAChE,IAAIqL,EAAuB,EAAhBhM,KAAK+J,MAAMpJ,GACtBX,KAAK+J,MAAMpJ,GAAMsM,GAAU,GAAK5M,EAAO2L,IAAS3L,EAChD4M,EAAQjB,EAAO8N,EAajB,OATIC,GAAyB,IAAV9M,IACjB8M,EAAYhQ,MAAMgQ,EAAY/Y,UAAYiM,GAGxB,IAAhBjN,KAAKgB,SACPhB,KAAK+J,MAAM,GAAK,EAChB/J,KAAKgB,OAAS,GAGThB,KAAK4I,SAGda,EAAGxH,UAAU+X,MAAQ,SAAgBT,EAAMI,EAAMC,GAG/C,OADA5Q,EAAyB,IAAlBhJ,KAAK8J,UACL9J,KAAKuO,OAAOgL,EAAMI,EAAMC,IAIjCnQ,EAAGxH,UAAUgY,KAAO,SAAeV,GACjC,OAAOvZ,KAAKqM,QAAQqN,MAAMH,IAG5B9P,EAAGxH,UAAUiY,MAAQ,SAAgBX,GACnC,OAAOvZ,KAAKqM,QAAQiN,OAAOC,IAI7B9P,EAAGxH,UAAUkY,KAAO,SAAeZ,GACjC,OAAOvZ,KAAKqM,QAAQ2N,MAAMT,IAG5B9P,EAAGxH,UAAUmY,MAAQ,SAAgBb,GACnC,OAAOvZ,KAAKqM,QAAQkC,OAAOgL,IAI7B9P,EAAGxH,UAAUmN,MAAQ,SAAgBoB,GACnCxH,EAAsB,iBAARwH,GAA2B,GAAPA,GAClC,IAAInQ,EAAImQ,EAAM,GACVlQ,GAAKkQ,EAAMnQ,GAAK,GAChBgO,EAAI,GAAKhO,EAGb,QAAIL,KAAKgB,QAAUV,OAGXN,KAAK+J,MAAMzJ,GAEL+N,IAIhB5E,EAAGxH,UAAUoY,OAAS,SAAiBd,GACrCvQ,EAAuB,iBAATuQ,GAA6B,GAARA,GACnC,IAAIlZ,EAAIkZ,EAAO,GACXjZ,GAAKiZ,EAAOlZ,GAAK,GAIrB,GAFA2I,EAAyB,IAAlBhJ,KAAK8J,SAAgB,2CAExB9J,KAAKgB,QAAUV,EACjB,OAAON,KAQT,GALU,IAANK,GACFC,IAEFN,KAAKgB,OAASyJ,KAAKC,IAAIpK,EAAGN,KAAKgB,QAErB,IAANX,EAAS,CACX,IAAIyZ,EAAO,SAAc,WAAczZ,GAAMA,EAC7CL,KAAK+J,MAAM/J,KAAKgB,OAAS,IAAM8Y,EAGjC,OAAO9Z,KAAK4I,SAIda,EAAGxH,UAAUqY,MAAQ,SAAgBf,GACnC,OAAOvZ,KAAKqM,QAAQgO,OAAOd,IAI7B9P,EAAGxH,UAAUiN,MAAQ,SAAgBrE,GAGnC,OAFA7B,EAAsB,iBAAR6B,GACd7B,EAAO6B,EAAM,UACTA,EAAM,EAAU7K,KAAKua,OAAO1P,GAGV,IAAlB7K,KAAK8J,UACa,IAAhB9J,KAAKgB,SAAiC,EAAhBhB,KAAK+J,MAAM,IAAUc,GAC7C7K,KAAK+J,MAAM,GAAKc,GAAuB,EAAhB7K,KAAK+J,MAAM,IAClC/J,KAAK8J,SAAW,IAIlB9J,KAAK8J,SAAW,EAChB9J,KAAKua,MAAM1P,GACX7K,KAAK8J,SAAW,GALP9J,MAUJA,KAAKkM,OAAOrB,IAGrBpB,EAAGxH,UAAUiK,OAAS,SAAiBrB,GACrC7K,KAAK+J,MAAM,IAAMc,EAGjB,IAAK,IAAIlK,EAAI,EAAGA,EAAIX,KAAKgB,QAA2B,UAAjBhB,KAAK+J,MAAMpJ,GAAiBA,IAC7DX,KAAK+J,MAAMpJ,IAAM,SACbA,IAAMX,KAAKgB,OAAS,EACtBhB,KAAK+J,MAAMpJ,EAAI,GAAK,EAEpBX,KAAK+J,MAAMpJ,EAAI,KAKnB,OAFAX,KAAKgB,OAASyJ,KAAKK,IAAI9K,KAAKgB,OAAQL,EAAI,GAEjCX,MAITyJ,EAAGxH,UAAUsY,MAAQ,SAAgB1P,GAGnC,GAFA7B,EAAsB,iBAAR6B,GACd7B,EAAO6B,EAAM,UACTA,EAAM,EAAG,OAAO7K,KAAKkP,OAAOrE,GAEhC,GAAsB,IAAlB7K,KAAK8J,SAIP,OAHA9J,KAAK8J,SAAW,EAChB9J,KAAKkP,MAAMrE,GACX7K,KAAK8J,SAAW,EACT9J,KAKT,GAFAA,KAAK+J,MAAM,IAAMc,EAEG,IAAhB7K,KAAKgB,QAAgBhB,KAAK+J,MAAM,GAAK,EACvC/J,KAAK+J,MAAM,IAAM/J,KAAK+J,MAAM,GAC5B/J,KAAK8J,SAAW,OAGhB,IAAK,IAAInJ,EAAI,EAAGA,EAAIX,KAAKgB,QAAUhB,KAAK+J,MAAMpJ,GAAK,EAAGA,IACpDX,KAAK+J,MAAMpJ,IAAM,SACjBX,KAAK+J,MAAMpJ,EAAI,IAAM,EAIzB,OAAOX,KAAK4I,SAGda,EAAGxH,UAAUuY,KAAO,SAAe3P,GACjC,OAAO7K,KAAKqM,QAAQ6C,MAAMrE,IAG5BpB,EAAGxH,UAAUwY,KAAO,SAAe5P,GACjC,OAAO7K,KAAKqM,QAAQkO,MAAM1P,IAG5BpB,EAAGxH,UAAUyY,KAAO,WAGlB,OAFA1a,KAAK8J,SAAW,EAET9J,MAGTyJ,EAAGxH,UAAU+M,IAAM,WACjB,OAAOhP,KAAKqM,QAAQqO,QAGtBjR,EAAGxH,UAAU0Y,aAAe,SAAuB9P,EAAKD,EAAKgQ,GAC3D,IACIja,EAIA+K,EALAlB,EAAMK,EAAI7J,OAAS4Z,EAGvB5a,KAAKsM,QAAQ9B,GAGb,IAAIyC,EAAQ,EACZ,IAAKtM,EAAI,EAAGA,EAAIkK,EAAI7J,OAAQL,IAAK,CAC/B+K,GAA6B,EAAxB1L,KAAK+J,MAAMpJ,EAAIia,IAAc3N,EAClC,IAAIjC,GAAwB,EAAfH,EAAId,MAAMpJ,IAAUiK,EAEjCqC,IADAvB,GAAa,SAARV,IACS,KAAQA,EAAQ,SAAa,GAC3ChL,KAAK+J,MAAMpJ,EAAIia,GAAa,SAAJlP,EAE1B,KAAO/K,EAAIX,KAAKgB,OAAS4Z,EAAOja,IAE9BsM,GADAvB,GAA6B,EAAxB1L,KAAK+J,MAAMpJ,EAAIia,IAAc3N,IACrB,GACbjN,KAAK+J,MAAMpJ,EAAIia,GAAa,SAAJlP,EAG1B,GAAc,IAAVuB,EAAa,OAAOjN,KAAK4I,QAK7B,IAFAI,GAAkB,IAAXiE,GAEFtM,EADLsM,EAAQ,EACItM,EAAIX,KAAKgB,OAAQL,IAE3BsM,GADAvB,IAAsB,EAAhB1L,KAAK+J,MAAMpJ,IAAUsM,IACd,GACbjN,KAAK+J,MAAMpJ,GAAS,SAAJ+K,EAIlB,OAFA1L,KAAK8J,SAAW,EAET9J,KAAK4I,SAGda,EAAGxH,UAAU4Y,SAAW,SAAmBhQ,EAAKiQ,GAC9C,IAAIF,GAAQ5a,KAAKgB,OAAS6J,EAAI7J,QAE1BP,EAAIT,KAAKqM,QACTU,EAAIlC,EAGJkQ,EAA8B,EAAxBhO,EAAEhD,MAAMgD,EAAE/L,OAAS,GAGf,KADd4Z,EAAQ,GADM5a,KAAKwO,WAAWuM,MAG5BhO,EAAIA,EAAEmN,MAAMU,GACZna,EAAE6Y,OAAOsB,GACTG,EAA8B,EAAxBhO,EAAEhD,MAAMgD,EAAE/L,OAAS,IAI3B,IACIqN,EADA4J,EAAIxX,EAAEO,OAAS+L,EAAE/L,OAGrB,GAAa,QAAT8Z,EAAgB,EAClBzM,EAAI,IAAI5E,EAAG,OACTzI,OAASiX,EAAI,EACf5J,EAAEtE,MAAQ,IAAI/H,MAAMqM,EAAErN,QACtB,IAAK,IAAIL,EAAI,EAAGA,EAAI0N,EAAErN,OAAQL,IAC5B0N,EAAEtE,MAAMpJ,GAAK,EAIjB,IAAIqa,EAAOva,EAAE4L,QAAQsO,aAAa5N,EAAG,EAAGkL,GAClB,IAAlB+C,EAAKlR,WACPrJ,EAAIua,EACA3M,IACFA,EAAEtE,MAAMkO,GAAK,IAIjB,IAAK,IAAIvR,EAAIuR,EAAI,EAAQ,GAALvR,EAAQA,IAAK,CAC/B,IAAIuU,EAAmC,UAAL,EAAxBxa,EAAEsJ,MAAMgD,EAAE/L,OAAS0F,KACE,EAA5BjG,EAAEsJ,MAAMgD,EAAE/L,OAAS0F,EAAI,IAO1B,IAHAuU,EAAKxQ,KAAKC,IAAKuQ,EAAKF,EAAO,EAAG,UAE9Bta,EAAEka,aAAa5N,EAAGkO,EAAIvU,GACA,IAAfjG,EAAEqJ,UACPmR,IACAxa,EAAEqJ,SAAW,EACbrJ,EAAEka,aAAa5N,EAAG,EAAGrG,GAChBjG,EAAE+M,WACL/M,EAAEqJ,UAAY,GAGduE,IACFA,EAAEtE,MAAMrD,GAAKuU,GAajB,OAVI5M,GACFA,EAAEzF,QAEJnI,EAAEmI,QAGW,QAATkS,GAA4B,IAAVF,GACpBna,EAAE8N,OAAOqM,GAGJ,CACLM,IAAK7M,GAAK,KACVtC,IAAKtL,IAQTgJ,EAAGxH,UAAUkZ,OAAS,SAAiBtQ,EAAKiQ,EAAMM,GAGhD,OAFApS,GAAQ6B,EAAI2C,UAERxN,KAAKwN,SACA,CACL0N,IAAK,IAAIzR,EAAG,GACZsC,IAAK,IAAItC,EAAG,IAKM,IAAlBzJ,KAAK8J,UAAmC,IAAjBe,EAAIf,UAC7BsE,EAAMpO,KAAKwP,MAAM2L,OAAOtQ,EAAKiQ,GAEhB,QAATA,IACFI,EAAM9M,EAAI8M,IAAI1L,OAGH,QAATsL,IACF/O,EAAMqC,EAAIrC,IAAIyD,MACV4L,GAA6B,IAAjBrP,EAAIjC,UAClBiC,EAAI2E,KAAK7F,IAIN,CACLqQ,IAAKA,EACLnP,IAAKA,IAIa,IAAlB/L,KAAK8J,UAAmC,IAAjBe,EAAIf,UAC7BsE,EAAMpO,KAAKmb,OAAOtQ,EAAI2E,MAAOsL,GAEhB,QAATA,IACFI,EAAM9M,EAAI8M,IAAI1L,OAGT,CACL0L,IAAKA,EACLnP,IAAKqC,EAAIrC,MAI0B,IAAlC/L,KAAK8J,SAAWe,EAAIf,WACvBsE,EAAMpO,KAAKwP,MAAM2L,OAAOtQ,EAAI2E,MAAOsL,GAEtB,QAATA,IACF/O,EAAMqC,EAAIrC,IAAIyD,MACV4L,GAA6B,IAAjBrP,EAAIjC,UAClBiC,EAAI4E,KAAK9F,IAIN,CACLqQ,IAAK9M,EAAI8M,IACTnP,IAAKA,IAOLlB,EAAI7J,OAAShB,KAAKgB,QAAUhB,KAAKiL,IAAIJ,GAAO,EACvC,CACLqQ,IAAK,IAAIzR,EAAG,GACZsC,IAAK/L,MAKU,IAAf6K,EAAI7J,OACO,QAAT8Z,EACK,CACLI,IAAKlb,KAAKqb,KAAKxQ,EAAId,MAAM,IACzBgC,IAAK,MAII,QAAT+O,EACK,CACLI,IAAK,KACLnP,IAAK,IAAItC,EAAGzJ,KAAKyN,KAAK5C,EAAId,MAAM,MAI7B,CACLmR,IAAKlb,KAAKqb,KAAKxQ,EAAId,MAAM,IACzBgC,IAAK,IAAItC,EAAGzJ,KAAKyN,KAAK5C,EAAId,MAAM,MAI7B/J,KAAK6a,SAAShQ,EAAKiQ,GAlF1B,IAAII,EAAKnP,EAAKqC,GAsFhB3E,EAAGxH,UAAUiZ,IAAM,SAAcrQ,GAC/B,OAAO7K,KAAKmb,OAAOtQ,EAAK,OAAO,GAAOqQ,KAIxCzR,EAAGxH,UAAU8J,IAAM,SAAclB,GAC/B,OAAO7K,KAAKmb,OAAOtQ,EAAK,OAAO,GAAOkB,KAGxCtC,EAAGxH,UAAUqZ,KAAO,SAAezQ,GACjC,OAAO7K,KAAKmb,OAAOtQ,EAAK,OAAO,GAAMkB,KAIvCtC,EAAGxH,UAAUsZ,SAAW,SAAmB1Q,GACzC,IAAI2Q,EAAKxb,KAAKmb,OAAOtQ,GAGrB,GAAI2Q,EAAGzP,IAAIyB,SAAU,OAAOgO,EAAGN,IAE/B,IAAInP,EAA0B,IAApByP,EAAGN,IAAIpR,SAAiB0R,EAAGzP,IAAI4E,KAAK9F,GAAO2Q,EAAGzP,IAEpD0P,EAAO5Q,EAAIuP,MAAM,GACjBsB,EAAK7Q,EAAIyD,MAAM,GACfrD,EAAMc,EAAId,IAAIwQ,GAGlB,OAAIxQ,EAAM,GAAY,IAAPyQ,GAAoB,IAARzQ,EAAkBuQ,EAAGN,IAGrB,IAApBM,EAAGN,IAAIpR,SAAiB0R,EAAGN,IAAIX,MAAM,GAAKiB,EAAGN,IAAIhM,MAAM,IAGhEzF,EAAGxH,UAAUwL,KAAO,SAAe5C,GACjC7B,EAAO6B,GAAO,UAId,IAHA,IAAI2M,GAAK,GAAK,IAAM3M,EAEhB8Q,EAAM,EACDhb,EAAIX,KAAKgB,OAAS,EAAQ,GAALL,EAAQA,IACpCgb,GAAOnE,EAAImE,GAAuB,EAAhB3b,KAAK+J,MAAMpJ,KAAWkK,EAG1C,OAAO8Q,GAITlS,EAAGxH,UAAUyL,MAAQ,SAAgB7C,GACnC7B,EAAO6B,GAAO,UAGd,IADA,IAAIoC,EAAQ,EACHtM,EAAIX,KAAKgB,OAAS,EAAQ,GAALL,EAAQA,IAAK,CACzC,IAAI+K,GAAqB,EAAhB1L,KAAK+J,MAAMpJ,IAAkB,SAARsM,EAC9BjN,KAAK+J,MAAMpJ,GAAM+K,EAAIb,EAAO,EAC5BoC,EAAQvB,EAAIb,EAGd,OAAO7K,KAAK4I,SAGda,EAAGxH,UAAUoZ,KAAO,SAAexQ,GACjC,OAAO7K,KAAKqM,QAAQqB,MAAM7C,IAG5BpB,EAAGxH,UAAU2Z,KAAO,SAAepE,GACjCxO,EAAsB,IAAfwO,EAAE1N,UACTd,GAAQwO,EAAEhK,UAEV,IAAI2I,EAAInW,KACJoW,EAAIoB,EAAEnL,QAGR8J,EADiB,IAAfA,EAAErM,SACAqM,EAAEmF,KAAK9D,GAEPrB,EAAE9J,QAaR,IATA,IAAIwP,EAAI,IAAIpS,EAAG,GACXqS,EAAI,IAAIrS,EAAG,GAGXsS,EAAI,IAAItS,EAAG,GACXuS,EAAI,IAAIvS,EAAG,GAEXwS,EAAI,EAED9F,EAAE+F,UAAY9F,EAAE8F,UACrB/F,EAAE5H,OAAO,GACT6H,EAAE7H,OAAO,KACP0N,EAMJ,IAHA,IAAIE,EAAK/F,EAAE/J,QACP+P,EAAKjG,EAAE9J,SAEH8J,EAAE3I,UAAU,CAClB,IAAK,IAAI7M,EAAI,EAAG0b,EAAK,EAAyB,IAArBlG,EAAEpM,MAAM,GAAKsS,IAAa1b,EAAI,KAAMA,EAAG0b,IAAO,GACvE,GAAQ,EAAJ1b,EAEF,IADAwV,EAAE5H,OAAO5N,GACI,EAANA,MACDkb,EAAES,SAAWR,EAAEQ,WACjBT,EAAEnL,KAAKyL,GACPL,EAAEnL,KAAKyL,IAGTP,EAAEtN,OAAO,GACTuN,EAAEvN,OAAO,GAIb,IAAK,IAAI7H,EAAI,EAAG6V,EAAK,EAAyB,IAArBnG,EAAErM,MAAM,GAAKwS,IAAa7V,EAAI,KAAMA,EAAG6V,IAAO,GACvE,GAAQ,EAAJ7V,EAEF,IADA0P,EAAE7H,OAAO7H,GACI,EAANA,MACDqV,EAAEO,SAAWN,EAAEM,WACjBP,EAAErL,KAAKyL,GACPH,EAAErL,KAAKyL,IAGTL,EAAExN,OAAO,GACTyN,EAAEzN,OAAO,GAIG,GAAZ4H,EAAElL,IAAImL,IACRD,EAAExF,KAAKyF,GACPyF,EAAElL,KAAKoL,GACPD,EAAEnL,KAAKqL,KAEP5F,EAAEzF,KAAKwF,GACP4F,EAAEpL,KAAKkL,GACPG,EAAErL,KAAKmL,IAIX,MAAO,CACLrb,EAAGsb,EACHhP,EAAGiP,EACHQ,IAAKpG,EAAEkD,OAAO2C,KAOlBxS,EAAGxH,UAAUwa,OAAS,SAAiBjF,GACrCxO,EAAsB,IAAfwO,EAAE1N,UACTd,GAAQwO,EAAEhK,UAEV,IAAI/M,EAAIT,KACJ+M,EAAIyK,EAAEnL,QAGR5L,EADiB,IAAfA,EAAEqJ,SACArJ,EAAE6a,KAAK9D,GAEP/W,EAAE4L,QAQR,IALA,IAuCI+B,EAvCAsO,EAAK,IAAIjT,EAAG,GACZkT,EAAK,IAAIlT,EAAG,GAEZmT,EAAQ7P,EAAEV,QAEK,EAAZ5L,EAAEoc,KAAK,IAAsB,EAAZ9P,EAAE8P,KAAK,IAAQ,CACrC,IAAK,IAAIlc,EAAI,EAAG0b,EAAK,EAAyB,IAArB5b,EAAEsJ,MAAM,GAAKsS,IAAa1b,EAAI,KAAMA,EAAG0b,IAAO,GACvE,GAAQ,EAAJ1b,EAEF,IADAF,EAAE8N,OAAO5N,GACI,EAANA,KACD+b,EAAGJ,SACLI,EAAGhM,KAAKkM,GAGVF,EAAGnO,OAAO,GAId,IAAK,IAAI7H,EAAI,EAAG6V,EAAK,EAAyB,IAArBxP,EAAEhD,MAAM,GAAKwS,IAAa7V,EAAI,KAAMA,EAAG6V,IAAO,GACvE,GAAQ,EAAJ7V,EAEF,IADAqG,EAAEwB,OAAO7H,GACI,EAANA,KACDiW,EAAGL,SACLK,EAAGjM,KAAKkM,GAGVD,EAAGpO,OAAO,GAIE,GAAZ9N,EAAEwK,IAAI8B,IACRtM,EAAEkQ,KAAK5D,GACP2P,EAAG/L,KAAKgM,KAER5P,EAAE4D,KAAKlQ,GACPkc,EAAGhM,KAAK+L,IAeZ,OATEtO,EADgB,IAAd3N,EAAEoc,KAAK,GACHH,EAEAC,GAGAE,KAAK,GAAK,GAChBzO,EAAIsC,KAAK8G,GAGJpJ,GAGT3E,EAAGxH,UAAUua,IAAM,SAAc3R,GAC/B,GAAI7K,KAAKwN,SAAU,OAAO3C,EAAImE,MAC9B,GAAInE,EAAI2C,SAAU,OAAOxN,KAAKgP,MAE9B,IAAIvO,EAAIT,KAAKqM,QACTU,EAAIlC,EAAIwB,QACZ5L,EAAEqJ,SAAW,EAIb,IAAK,IAAI8Q,EAHT7N,EAAEjD,SAAW,EAGOrJ,EAAEyb,UAAYnP,EAAEmP,SAAUtB,IAC5Cna,EAAE8N,OAAO,GACTxB,EAAEwB,OAAO,GAGX,OAAG,CACD,KAAO9N,EAAEyb,UACPzb,EAAE8N,OAAO,GAEX,KAAOxB,EAAEmP,UACPnP,EAAEwB,OAAO,GAGX,IAAIlO,EAAII,EAAEwK,IAAI8B,GACd,GAAI1M,EAAI,EAAG,CAET,IAAIF,EAAIM,EACRA,EAAIsM,EACJA,EAAI5M,OACC,GAAU,IAANE,GAAyB,IAAd0M,EAAE8P,KAAK,GAC3B,MAGFpc,EAAEkQ,KAAK5D,GAGT,OAAOA,EAAEuM,OAAOsB,IAIlBnR,EAAGxH,UAAU6a,KAAO,SAAejS,GACjC,OAAO7K,KAAK4b,KAAK/Q,GAAKpK,EAAE6a,KAAKzQ,IAG/BpB,EAAGxH,UAAUia,OAAS,WACpB,OAA+B,IAAP,EAAhBlc,KAAK+J,MAAM,KAGrBN,EAAGxH,UAAUqa,MAAQ,WACnB,OAA+B,IAAP,EAAhBtc,KAAK+J,MAAM,KAIrBN,EAAGxH,UAAUqM,MAAQ,SAAgBzD,GACnC,OAAO7K,KAAK+J,MAAM,GAAKc,GAIzBpB,EAAGxH,UAAU8a,MAAQ,SAAgBvM,GACnCxH,EAAsB,iBAARwH,GACd,IAAInQ,EAAImQ,EAAM,GACVlQ,GAAKkQ,EAAMnQ,GAAK,GAChBgO,EAAI,GAAKhO,EAGb,GAAIL,KAAKgB,QAAUV,EAGjB,OAFAN,KAAKsM,QAAQhM,EAAI,GACjBN,KAAK+J,MAAMzJ,IAAM+N,EACVrO,KAKT,IADA,IAAIiN,EAAQoB,EACH1N,EAAIL,EAAa,IAAV2M,GAAetM,EAAIX,KAAKgB,OAAQL,IAAK,CACnD,IAAI+K,EAAoB,EAAhB1L,KAAK+J,MAAMpJ,GAEnBsM,GADAvB,GAAKuB,KACS,GACdvB,GAAK,SACL1L,KAAK+J,MAAMpJ,GAAK+K,EAMlB,OAJc,IAAVuB,IACFjN,KAAK+J,MAAMpJ,GAAKsM,EAChBjN,KAAKgB,UAEAhB,MAGTyJ,EAAGxH,UAAUuL,OAAS,WACpB,OAAuB,IAAhBxN,KAAKgB,QAAkC,IAAlBhB,KAAK+J,MAAM,IAGzCN,EAAGxH,UAAU4a,KAAO,SAAehS,GACjC,IAOIuD,EAPAtE,EAAWe,EAAM,EAErB,GAAsB,IAAlB7K,KAAK8J,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB9J,KAAK8J,UAAkBA,EAAU,OAAO,EAK5C,GAHA9J,KAAK4I,QAGa,EAAd5I,KAAKgB,OACPoN,EAAM,MACD,CACDtE,IACFe,GAAOA,GAGT7B,EAAO6B,GAAO,SAAW,qBAEzB,IAAIa,EAAoB,EAAhB1L,KAAK+J,MAAM,GACnBqE,EAAM1C,IAAMb,EAAM,EAAIa,EAAIb,GAAO,EAAI,EAEvC,OAAsB,IAAlB7K,KAAK8J,SAA8B,GAANsE,EAC1BA,GAOT3E,EAAGxH,UAAUgJ,IAAM,SAAcJ,GAC/B,GAAsB,IAAlB7K,KAAK8J,UAAmC,IAAjBe,EAAIf,SAAgB,OAAQ,EACvD,GAAsB,IAAlB9J,KAAK8J,UAAmC,IAAjBe,EAAIf,SAAgB,OAAO,EAEtD,IAAIsE,EAAMpO,KAAKgd,KAAKnS,GACpB,OAAsB,IAAlB7K,KAAK8J,SAA8B,GAANsE,EAC1BA,GAIT3E,EAAGxH,UAAU+a,KAAO,SAAenS,GAEjC,GAAI7K,KAAKgB,OAAS6J,EAAI7J,OAAQ,OAAO,EACrC,GAAIhB,KAAKgB,OAAS6J,EAAI7J,OAAQ,OAAQ,EAGtC,IADA,IAAIoN,EAAM,EACDzN,EAAIX,KAAKgB,OAAS,EAAQ,GAALL,EAAQA,IAAK,CACzC,IAAIF,EAAoB,EAAhBT,KAAK+J,MAAMpJ,GACfoM,EAAmB,EAAflC,EAAId,MAAMpJ,GAElB,GAAIF,IAAMsM,EAAV,CACItM,EAAIsM,EACNqB,GAAO,EACMrB,EAAJtM,IACT2N,EAAM,GAER,OAEF,OAAOA,GAGT3E,EAAGxH,UAAUgb,IAAM,SAAcpS,GAC/B,OAA0B,IAAnB7K,KAAK6c,KAAKhS,IAGnBpB,EAAGxH,UAAUib,GAAK,SAAarS,GAC7B,OAAyB,IAAlB7K,KAAKiL,IAAIJ,IAGlBpB,EAAGxH,UAAUkb,KAAO,SAAetS,GACjC,OAAyB,GAAlB7K,KAAK6c,KAAKhS,IAGnBpB,EAAGxH,UAAUmb,IAAM,SAAcvS,GAC/B,OAAwB,GAAjB7K,KAAKiL,IAAIJ,IAGlBpB,EAAGxH,UAAUob,IAAM,SAAcxS,GAC/B,OAA2B,IAApB7K,KAAK6c,KAAKhS,IAGnBpB,EAAGxH,UAAUqb,GAAK,SAAazS,GAC7B,OAA0B,IAAnB7K,KAAKiL,IAAIJ,IAGlBpB,EAAGxH,UAAUsb,KAAO,SAAe1S,GACjC,OAAO7K,KAAK6c,KAAKhS,IAAQ,GAG3BpB,EAAGxH,UAAUub,IAAM,SAAc3S,GAC/B,OAAO7K,KAAKiL,IAAIJ,IAAQ,GAG1BpB,EAAGxH,UAAUwb,IAAM,SAAc5S,GAC/B,OAA0B,IAAnB7K,KAAK6c,KAAKhS,IAGnBpB,EAAGxH,UAAUyb,GAAK,SAAa7S,GAC7B,OAAyB,IAAlB7K,KAAKiL,IAAIJ,IAOlBpB,EAAGO,IAAM,SAAca,GACrB,OAAO,IAAI8S,EAAI9S,IAGjBpB,EAAGxH,UAAU2b,MAAQ,SAAgBC,GAGnC,OAFA7U,GAAQhJ,KAAKgK,IAAK,yCAClBhB,EAAyB,IAAlBhJ,KAAK8J,SAAgB,iCACrB+T,EAAIC,UAAU9d,MAAM+d,UAAUF,IAGvCpU,EAAGxH,UAAU+b,QAAU,WAErB,OADAhV,EAAOhJ,KAAKgK,IAAK,wDACVhK,KAAKgK,IAAIiU,YAAYje,OAG9ByJ,EAAGxH,UAAU8b,UAAY,SAAoBF,GAE3C,OADA7d,KAAKgK,IAAM6T,EACJ7d,MAGTyJ,EAAGxH,UAAUic,SAAW,SAAmBL,GAEzC,OADA7U,GAAQhJ,KAAKgK,IAAK,yCACXhK,KAAK+d,UAAUF,IAGxBpU,EAAGxH,UAAUkc,OAAS,SAAiBtT,GAErC,OADA7B,EAAOhJ,KAAKgK,IAAK,sCACVhK,KAAKgK,IAAI4G,IAAI5Q,KAAM6K,IAG5BpB,EAAGxH,UAAUmc,QAAU,SAAkBvT,GAEvC,OADA7B,EAAOhJ,KAAKgK,IAAK,uCACVhK,KAAKgK,IAAI0G,KAAK1Q,KAAM6K,IAG7BpB,EAAGxH,UAAUoc,OAAS,SAAiBxT,GAErC,OADA7B,EAAOhJ,KAAKgK,IAAK,sCACVhK,KAAKgK,IAAI6G,IAAI7Q,KAAM6K,IAG5BpB,EAAGxH,UAAUqc,QAAU,SAAkBzT,GAEvC,OADA7B,EAAOhJ,KAAKgK,IAAK,uCACVhK,KAAKgK,IAAI2G,KAAK3Q,KAAM6K,IAG7BpB,EAAGxH,UAAUsc,OAAS,SAAiB1T,GAErC,OADA7B,EAAOhJ,KAAKgK,IAAK,sCACVhK,KAAKgK,IAAIwU,IAAIxe,KAAM6K,IAG5BpB,EAAGxH,UAAUwc,OAAS,SAAiB5T,GAGrC,OAFA7B,EAAOhJ,KAAKgK,IAAK,sCACjBhK,KAAKgK,IAAI0U,SAAS1e,KAAM6K,GACjB7K,KAAKgK,IAAIY,IAAI5K,KAAM6K,IAG5BpB,EAAGxH,UAAU0c,QAAU,SAAkB9T,GAGvC,OAFA7B,EAAOhJ,KAAKgK,IAAK,sCACjBhK,KAAKgK,IAAI0U,SAAS1e,KAAM6K,GACjB7K,KAAKgK,IAAI6K,KAAK7U,KAAM6K,IAG7BpB,EAAGxH,UAAU2c,OAAS,WAGpB,OAFA5V,EAAOhJ,KAAKgK,IAAK,sCACjBhK,KAAKgK,IAAI6U,SAAS7e,MACXA,KAAKgK,IAAImP,IAAInZ,OAGtByJ,EAAGxH,UAAU6c,QAAU,WAGrB,OAFA9V,EAAOhJ,KAAKgK,IAAK,uCACjBhK,KAAKgK,IAAI6U,SAAS7e,MACXA,KAAKgK,IAAIoP,KAAKpZ,OAIvByJ,EAAGxH,UAAU8c,QAAU,WAGrB,OAFA/V,EAAOhJ,KAAKgK,IAAK,uCACjBhK,KAAKgK,IAAI6U,SAAS7e,MACXA,KAAKgK,IAAIgV,KAAKhf,OAGvByJ,EAAGxH,UAAUgd,QAAU,WAGrB,OAFAjW,EAAOhJ,KAAKgK,IAAK,uCACjBhK,KAAKgK,IAAI6U,SAAS7e,MACXA,KAAKgK,IAAI8S,KAAK9c,OAIvByJ,EAAGxH,UAAUid,OAAS,WAGpB,OAFAlW,EAAOhJ,KAAKgK,IAAK,sCACjBhK,KAAKgK,IAAI6U,SAAS7e,MACXA,KAAKgK,IAAIwF,IAAIxP,OAGtByJ,EAAGxH,UAAUkd,OAAS,SAAiBtU,GAGrC,OAFA7B,EAAOhJ,KAAKgK,MAAQa,EAAIb,IAAK,qBAC7BhK,KAAKgK,IAAI6U,SAAS7e,MACXA,KAAKgK,IAAImC,IAAInM,KAAM6K,IAI5B,IAAIuU,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQ3d,EAAM0V,GAErBxX,KAAK8B,KAAOA,EACZ9B,KAAKwX,EAAI,IAAI/N,EAAG+N,EAAG,IACnBxX,KAAKI,EAAIJ,KAAKwX,EAAE7I,YAChB3O,KAAKkN,EAAI,IAAIzD,EAAG,GAAG6P,OAAOtZ,KAAKI,GAAGuQ,KAAK3Q,KAAKwX,GAE5CxX,KAAK0f,IAAM1f,KAAK2f,OA2ClB,SAASC,IACPH,EAAO1e,KACLf,KACA,OACA,2EA+DJ,SAAS6f,IACPJ,EAAO1e,KACLf,KACA,OACA,kEAIJ,SAAS8f,IACPL,EAAO1e,KACLf,KACA,OACA,yDAIJ,SAAS+f,IAEPN,EAAO1e,KACLf,KACA,QACA,uEA8CJ,SAAS2d,EAAK1F,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI+H,EAAQvW,EAAGwW,OAAOhI,GACtBjY,KAAKiY,EAAI+H,EAAMxI,EACfxX,KAAKggB,MAAQA,OAEbhX,EAAOiP,EAAEgF,IAAI,GAAI,kCACjBjd,KAAKiY,EAAIA,EACTjY,KAAKggB,MAAQ,KAkOjB,SAASE,EAAMjI,GACb0F,EAAI5c,KAAKf,KAAMiY,GAEfjY,KAAK4a,MAAQ5a,KAAKiY,EAAEtJ,YAChB3O,KAAK4a,MAAQ,IAAO,IACtB5a,KAAK4a,OAAS,GAAM5a,KAAK4a,MAAQ,IAGnC5a,KAAKK,EAAI,IAAIoJ,EAAG,GAAG6P,OAAOtZ,KAAK4a,OAC/B5a,KAAK0b,GAAK1b,KAAKmgB,KAAKngB,KAAKK,EAAE8Y,OAC3BnZ,KAAKogB,KAAOpgB,KAAKK,EAAEoc,OAAOzc,KAAKiY,GAE/BjY,KAAKqgB,KAAOrgB,KAAKogB,KAAKxV,IAAI5K,KAAKK,GAAGka,MAAM,GAAGW,IAAIlb,KAAKiY,GACpDjY,KAAKqgB,KAAOrgB,KAAKqgB,KAAK/E,KAAKtb,KAAKK,GAChCL,KAAKqgB,KAAOrgB,KAAKK,EAAEwQ,IAAI7Q,KAAKqgB,MAta9BZ,EAAOxd,UAAU0d,KAAO,WACtB,IAAID,EAAM,IAAIjW,EAAG,MAEjB,OADAiW,EAAI3V,MAAQ,IAAI/H,MAAMyI,KAAKgB,KAAKzL,KAAKI,EAAI,KAClCsf,GAGTD,EAAOxd,UAAUqe,QAAU,SAAkBzV,GAM3C,IAHA,IACI0V,EADAlgB,EAAIwK,EAIN7K,KAAKwgB,MAAMngB,EAAGL,KAAK0f,MAGnBa,GADAlgB,GADAA,EAAIL,KAAKygB,MAAMpgB,IACTqQ,KAAK1Q,KAAK0f,MACP/Q,aACK3O,KAAKI,IAErB,IAAI6K,EAAMsV,EAAOvgB,KAAKI,GAAK,EAAIC,EAAE2c,KAAKhd,KAAKwX,GAU3C,OATY,IAARvM,GACF5K,EAAE0J,MAAM,GAAK,EACb1J,EAAEW,OAAS,GACI,EAANiK,EACT5K,EAAEsQ,KAAK3Q,KAAKwX,GAEZnX,EAAEuI,QAGGvI,GAGTof,EAAOxd,UAAUue,MAAQ,SAAgBE,EAAO5T,GAC9C4T,EAAMnS,OAAOvO,KAAKI,EAAG,EAAG0M,IAG1B2S,EAAOxd,UAAUwe,MAAQ,SAAgB5V,GACvC,OAAOA,EAAIgK,KAAK7U,KAAKkN,IASvB/D,EAASyW,EAAMH,GAEfG,EAAK3d,UAAUue,MAAQ,SAAgBE,EAAOC,GAK5C,IAHA,IAEIC,EAASnW,KAAKC,IAAIgW,EAAM1f,OAAQ,GAC3BL,EAAI,EAAGA,EAAIigB,EAAQjgB,IAC1BggB,EAAO5W,MAAMpJ,GAAK+f,EAAM3W,MAAMpJ,GAIhC,GAFAggB,EAAO3f,OAAS4f,EAEZF,EAAM1f,QAAU,EAGlB,OAFA0f,EAAM3W,MAAM,GAAK,OACjB2W,EAAM1f,OAAS,GAKjB,IAAI6f,EAAOH,EAAM3W,MAAM,GAGvB,IAFA4W,EAAO5W,MAAM4W,EAAO3f,UAhBT,QAgBqB6f,EAE3BlgB,EAAI,GAAIA,EAAI+f,EAAM1f,OAAQL,IAAK,CAClC,IAAImgB,EAAwB,EAAjBJ,EAAM3W,MAAMpJ,GACvB+f,EAAM3W,MAAMpJ,EAAI,KApBP,QAoBemgB,IAAgB,EAAMD,IAAS,GACvDA,EAAOC,EAETD,KAAU,GAEG,KADbH,EAAM3W,MAAMpJ,EAAI,IAAMkgB,IACW,GAAfH,EAAM1f,OACtB0f,EAAM1f,QAAU,GAEhB0f,EAAM1f,QAAU,GAIpB4e,EAAK3d,UAAUwe,MAAQ,SAAgB5V,GAErCA,EAAId,MAAMc,EAAI7J,QAAU,EACxB6J,EAAId,MAAMc,EAAI7J,OAAS,GAAK,EAC5B6J,EAAI7J,QAAU,EAId,IADA,IAAIgM,EAAK,EACArM,EAAI,EAAGA,EAAIkK,EAAI7J,OAAQL,IAAK,CACnC,IAAI+K,EAAmB,EAAfb,EAAId,MAAMpJ,GAClBqM,GAAU,IAAJtB,EACNb,EAAId,MAAMpJ,GAAU,SAALqM,EACfA,EAAS,GAAJtB,GAAasB,EAAK,SAAa,GAUtC,OANkC,IAA9BnC,EAAId,MAAMc,EAAI7J,OAAS,KACzB6J,EAAI7J,SAC8B,IAA9B6J,EAAId,MAAMc,EAAI7J,OAAS,IACzB6J,EAAI7J,UAGD6J,GAST1B,EAAS0W,EAAMJ,GAQftW,EAAS2W,EAAML,GASftW,EAAS4W,EAAQN,GAEjBM,EAAO9d,UAAUwe,MAAQ,SAAgB5V,GAGvC,IADA,IAAIoC,EAAQ,EACHtM,EAAI,EAAGA,EAAIkK,EAAI7J,OAAQL,IAAK,CACnC,IAAIiO,EAA0B,IAAL,EAAf/D,EAAId,MAAMpJ,IAAiBsM,EACjCD,EAAU,SAAL4B,EACTA,KAAQ,GAER/D,EAAId,MAAMpJ,GAAKqM,EACfC,EAAQ2B,EAKV,OAHc,IAAV3B,IACFpC,EAAId,MAAMc,EAAI7J,UAAYiM,GAErBpC,GAITpB,EAAGwW,OAAS,SAAgBne,GAE1B,GAAIsd,EAAOtd,GAAO,OAAOsd,EAAOtd,GAEhC,IAAIke,EACJ,GAAa,SAATle,EACFke,EAAQ,IAAIJ,OACP,GAAa,SAAT9d,EACTke,EAAQ,IAAIH,OACP,GAAa,SAAT/d,EACTke,EAAQ,IAAIF,MACP,CAAA,GAAa,WAAThe,EAGT,MAAM,IAAIlB,MAAM,iBAAmBkB,GAFnCke,EAAQ,IAAID,EAMd,OAFAX,EAAOtd,GAAQke,GAoBjBrC,EAAI1b,UAAU4c,SAAW,SAAmBpe,GAC1CuI,EAAsB,IAAfvI,EAAEqJ,SAAgB,iCACzBd,EAAOvI,EAAEuJ,IAAK,oCAGhB2T,EAAI1b,UAAUyc,SAAW,SAAmBje,EAAGsM,GAC7C/D,EAAqC,IAA7BvI,EAAEqJ,SAAWiD,EAAEjD,UAAiB,iCACxCd,EAAOvI,EAAEuJ,KAAOvJ,EAAEuJ,MAAQ+C,EAAE/C,IAC1B,oCAGJ2T,EAAI1b,UAAUke,KAAO,SAAe1f,GAClC,OAAIT,KAAKggB,MAAchgB,KAAKggB,MAAMM,QAAQ7f,GAAGsd,UAAU/d,MAChDS,EAAE6a,KAAKtb,KAAKiY,GAAG8F,UAAU/d,OAGlC2d,EAAI1b,UAAUuN,IAAM,SAAc/O,GAChC,OAAIA,EAAE+M,SACG/M,EAAE4L,QAGJrM,KAAKiY,EAAEpH,IAAIpQ,GAAGsd,UAAU/d,OAGjC2d,EAAI1b,UAAU2O,IAAM,SAAcnQ,EAAGsM,GACnC/M,KAAK0e,SAASje,EAAGsM,GAEjB,IAAIqB,EAAM3N,EAAEmQ,IAAI7D,GAIhB,OAHuB,GAAnBqB,EAAInD,IAAIjL,KAAKiY,IACf7J,EAAIuC,KAAK3Q,KAAKiY,GAET7J,EAAI2P,UAAU/d,OAGvB2d,EAAI1b,UAAUyO,KAAO,SAAejQ,EAAGsM,GACrC/M,KAAK0e,SAASje,EAAGsM,GAEjB,IAAIqB,EAAM3N,EAAEiQ,KAAK3D,GAIjB,OAHuB,GAAnBqB,EAAInD,IAAIjL,KAAKiY,IACf7J,EAAIuC,KAAK3Q,KAAKiY,GAET7J,GAGTuP,EAAI1b,UAAU4O,IAAM,SAAcpQ,EAAGsM,GACnC/M,KAAK0e,SAASje,EAAGsM,GAEjB,IAAIqB,EAAM3N,EAAEoQ,IAAI9D,GAIhB,OAHIqB,EAAIyO,KAAK,GAAK,GAChBzO,EAAIsC,KAAK1Q,KAAKiY,GAET7J,EAAI2P,UAAU/d,OAGvB2d,EAAI1b,UAAU0O,KAAO,SAAelQ,EAAGsM,GACrC/M,KAAK0e,SAASje,EAAGsM,GAEjB,IAAIqB,EAAM3N,EAAEkQ,KAAK5D,GAIjB,OAHIqB,EAAIyO,KAAK,GAAK,GAChBzO,EAAIsC,KAAK1Q,KAAKiY,GAET7J,GAGTuP,EAAI1b,UAAUuc,IAAM,SAAc/d,EAAGoK,GAEnC,OADA7K,KAAK6e,SAASpe,GACPT,KAAKmgB,KAAK1f,EAAEyZ,MAAMrP,KAG3B8S,EAAI1b,UAAU4S,KAAO,SAAepU,EAAGsM,GAErC,OADA/M,KAAK0e,SAASje,EAAGsM,GACV/M,KAAKmgB,KAAK1f,EAAEoU,KAAK9H,KAG1B4Q,EAAI1b,UAAU2I,IAAM,SAAcnK,EAAGsM,GAEnC,OADA/M,KAAK0e,SAASje,EAAGsM,GACV/M,KAAKmgB,KAAK1f,EAAEmK,IAAImC,KAGzB4Q,EAAI1b,UAAUmX,KAAO,SAAe3Y,GAClC,OAAOT,KAAK6U,KAAKpU,EAAGA,EAAE4L,UAGxBsR,EAAI1b,UAAUkX,IAAM,SAAc1Y,GAChC,OAAOT,KAAK4K,IAAInK,EAAGA,IAGrBkd,EAAI1b,UAAU+c,KAAO,SAAeve,GAClC,GAAIA,EAAE+M,SAAU,OAAO/M,EAAE4L,QAEzB,IAAI0U,EAAO/gB,KAAKiY,EAAE3J,MAAM,GAIxB,GAHAtF,EAAO+X,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAI5U,EAAMnM,KAAKiY,EAAErH,IAAI,IAAInH,EAAG,IAAI8E,OAAO,GACvC,OAAOvO,KAAKmM,IAAI1L,EAAG0L,GAQrB,IAFA,IAAIkC,EAAIrO,KAAKiY,EAAEwC,KAAK,GAChBna,EAAI,GACA+N,EAAEb,UAA2B,IAAfa,EAAEC,MAAM,IAC5BhO,IACA+N,EAAEE,OAAO,GAEXvF,GAAQqF,EAAEb,UAEV,IAAIwT,EAAM,IAAIvX,EAAG,GAAGmU,MAAM5d,MACtBihB,EAAOD,EAAI9B,SAIXgC,EAAOlhB,KAAKiY,EAAEwC,KAAK,GAAGlM,OAAO,GAC7B4S,EAAInhB,KAAKiY,EAAEtJ,YAGf,IAFAwS,EAAI,IAAI1X,EAAG,EAAI0X,EAAIA,GAAGvD,MAAM5d,MAEW,IAAhCA,KAAKmM,IAAIgV,EAAGD,GAAMjW,IAAIgW,IAC3BE,EAAE/C,QAAQ6C,GAOZ,IAJA,IAAI/d,EAAIlD,KAAKmM,IAAIgV,EAAG9S,GAChBhO,EAAIL,KAAKmM,IAAI1L,EAAG4N,EAAEmM,KAAK,GAAGjM,OAAO,IACjCpO,EAAIH,KAAKmM,IAAI1L,EAAG4N,GAChB4J,EAAI3X,EACc,IAAfH,EAAE8K,IAAI+V,IAAY,CAEvB,IADA,IAAItB,EAAMvf,EACDQ,EAAI,EAAoB,IAAjB+e,EAAIzU,IAAI+V,GAAYrgB,IAClC+e,EAAMA,EAAId,SAEZ5V,EAAOrI,EAAIsX,GACX,IAAIlL,EAAI/M,KAAKmM,IAAIjJ,EAAG,IAAIuG,EAAG,GAAG6P,OAAOrB,EAAItX,EAAI,IAE7CN,EAAIA,EAAEoe,OAAO1R,GACb7J,EAAI6J,EAAE6R,SACNze,EAAIA,EAAEse,OAAOvb,GACb+U,EAAItX,EAGN,OAAON,GAGTsd,EAAI1b,UAAU6a,KAAO,SAAerc,GAClC,IAAI2gB,EAAM3gB,EAAEgc,OAAOzc,KAAKiY,GACxB,OAAqB,IAAjBmJ,EAAItX,UACNsX,EAAItX,SAAW,EACR9J,KAAKmgB,KAAKiB,GAAKlC,UAEflf,KAAKmgB,KAAKiB,IAIrBzD,EAAI1b,UAAUkK,IAAM,SAAc1L,EAAGoK,GACnC,GAAIA,EAAI2C,SAAU,OAAO,IAAI/D,EAAG,GAAGmU,MAAM5d,MACzC,GAAoB,IAAhB6K,EAAIgS,KAAK,GAAU,OAAOpc,EAAE4L,QAEhC,IACIgV,EAAM,IAAIrf,MAAM,IACpBqf,EAAI,GAAK,IAAI5X,EAAG,GAAGmU,MAAM5d,MACzBqhB,EAAI,GAAK5gB,EACT,IAAK,IAAIE,EAAI,EAAGA,EAAI0gB,EAAIrgB,OAAQL,IAC9B0gB,EAAI1gB,GAAKX,KAAK4K,IAAIyW,EAAI1gB,EAAI,GAAIF,GAGhC,IAAI2N,EAAMiT,EAAI,GACVC,EAAU,EACVC,EAAa,EACbjX,EAAQO,EAAI8D,YAAc,GAK9B,IAJc,IAAVrE,IACFA,EAAQ,IAGL3J,EAAIkK,EAAI7J,OAAS,EAAQ,GAALL,EAAQA,IAAK,CAEpC,IADA,IAAIqL,EAAOnB,EAAId,MAAMpJ,GACZ+F,EAAI4D,EAAQ,EAAQ,GAAL5D,EAAQA,IAAK,CACnC,IAAI8J,EAAOxE,GAAQtF,EAAK,EACpB0H,IAAQiT,EAAI,KACdjT,EAAMpO,KAAKmZ,IAAI/K,IAGL,IAARoC,GAAyB,IAAZ8Q,GAKjBA,IAAY,EACZA,GAAW9Q,GA9BE,MA+Bb+Q,GACwC,IAAN5gB,GAAiB,IAAN+F,KAE7C0H,EAAMpO,KAAK4K,IAAIwD,EAAKiT,EAAIC,IAExBA,EADAC,EAAa,IAVXA,EAAa,EAajBjX,EAAQ,GAGV,OAAO8D,GAGTuP,EAAI1b,UAAU6b,UAAY,SAAoBjT,GAC5C,IAAIxK,EAAIwK,EAAIyQ,KAAKtb,KAAKiY,GAEtB,OAAO5X,IAAMwK,EAAMxK,EAAEgM,QAAUhM,GAGjCsd,EAAI1b,UAAUgc,YAAc,SAAsBpT,GAChD,IAAIuD,EAAMvD,EAAIwB,QAEd,OADA+B,EAAIpE,IAAM,KACHoE,GAOT3E,EAAG+X,KAAO,SAAe3W,GACvB,OAAO,IAAIqV,EAAKrV,IAmBlB1B,EAAS+W,EAAMvC,GAEfuC,EAAKje,UAAU6b,UAAY,SAAoBjT,GAC7C,OAAO7K,KAAKmgB,KAAKtV,EAAIqP,MAAMla,KAAK4a,SAGlCsF,EAAKje,UAAUgc,YAAc,SAAsBpT,GACjD,IAAIxK,EAAIL,KAAKmgB,KAAKtV,EAAID,IAAI5K,KAAKogB,OAE/B,OADA/f,EAAE2J,IAAM,KACD3J,GAGT6f,EAAKje,UAAU4S,KAAO,SAAepU,EAAGsM,GACtC,GAAItM,EAAE+M,UAAYT,EAAES,SAGlB,OAFA/M,EAAEsJ,MAAM,GAAK,EACbtJ,EAAEO,OAAS,EACJP,EAGT,IAAIN,EAAIM,EAAEoU,KAAK9H,GACX7J,EAAI/C,EAAEma,MAAMta,KAAK4a,OAAOhQ,IAAI5K,KAAKqgB,MAAMhG,OAAOra,KAAK4a,OAAOhQ,IAAI5K,KAAKiY,GACnEzX,EAAIL,EAAEwQ,KAAKzN,GAAGqL,OAAOvO,KAAK4a,OAC1BxM,EAAM5N,EAQV,OANqB,GAAjBA,EAAEyK,IAAIjL,KAAKiY,GACb7J,EAAM5N,EAAEmQ,KAAK3Q,KAAKiY,GACTzX,EAAEqc,KAAK,GAAK,IACrBzO,EAAM5N,EAAEkQ,KAAK1Q,KAAKiY,IAGb7J,EAAI2P,UAAU/d,OAGvBkgB,EAAKje,UAAU2I,IAAM,SAAcnK,EAAGsM,GACpC,GAAItM,EAAE+M,UAAYT,EAAES,SAAU,OAAO,IAAI/D,EAAG,GAAGsU,UAAU/d,MAEzD,IAAIG,EAAIM,EAAEmK,IAAImC,GACV7J,EAAI/C,EAAEma,MAAMta,KAAK4a,OAAOhQ,IAAI5K,KAAKqgB,MAAMhG,OAAOra,KAAK4a,OAAOhQ,IAAI5K,KAAKiY,GACnEzX,EAAIL,EAAEwQ,KAAKzN,GAAGqL,OAAOvO,KAAK4a,OAC1BxM,EAAM5N,EAOV,OANqB,GAAjBA,EAAEyK,IAAIjL,KAAKiY,GACb7J,EAAM5N,EAAEmQ,KAAK3Q,KAAKiY,GACTzX,EAAEqc,KAAK,GAAK,IACrBzO,EAAM5N,EAAEkQ,KAAK1Q,KAAKiY,IAGb7J,EAAI2P,UAAU/d,OAGvBkgB,EAAKje,UAAU6a,KAAO,SAAerc,GAGnC,OADUT,KAAKmgB,KAAK1f,EAAEgc,OAAOzc,KAAKiY,GAAGrN,IAAI5K,KAAK0b,KACnCqC,UAAU/d,OAh2GzB,MAk2GqB,IAAXN,GAA0BA,EAAQM,OAE1C,CAAC2B,OAAS,IAAI8f,EAAE,CAAC,SAAS/gB,EAAQhB,EAAOD,GAC3C,IAAIiiB,EAAchhB,EAAQ,sBAAsBghB,YAAahiB,EAAOD,QAAU,SAASuB,GAAU,OAAO0gB,EAAY1gB,KAClH,CAAC2gB,qBAAqB,KAAKC,EAAE,CAAC,SAASlhB,EAAQhB,EAAOD,KAEtD,IAAIoiB,EAAE,CAAC,SAASnhB,EAAQhB,EAAOD,GACjC,aAEA,IAAIqiB,EAAWriB,EAEfqiB,EAASC,QAAUrhB,EAAQ,mBAAmBqhB,QAC9CD,EAAS1Z,MAAQ1H,EAAQ,oBACzBohB,EAASE,KAAOthB,EAAQ,WACxBohB,EAASG,SAAWvhB,EAAQ,wBAC5BohB,EAASI,MAAQxhB,EAAQ,oBACzBohB,EAASK,OAASzhB,EAAQ,qBAG1BohB,EAASM,GAAK1hB,EAAQ,iBACtBohB,EAASO,MAAQ3hB,EAAQ,qBAEvB,CAAC4hB,kBAAkB,GAAGC,mBAAmB,EAAEC,oBAAoB,GAAGC,gBAAgB,GAAGC,mBAAmB,GAAGC,uBAAuB,GAAGC,mBAAmB,GAAGC,QAAU,IAAIC,EAAE,CAAC,SAASpiB,EAAQhB,EAAOD,GACtM,aAEA,IAAIgK,EAAK/I,EAAQ,SAEb0H,EADW1H,EAAQ,kBACF0H,MACjB2a,EAAS3a,EAAM2a,OACfC,EAAS5a,EAAM4a,OACfha,EAASZ,EAAMY,OAEnB,SAASia,EAAUC,EAAMC,GACvBnjB,KAAKkjB,KAAOA,EACZljB,KAAKwX,EAAI,IAAI/N,EAAG0Z,EAAK3L,EAAG,IAGxBxX,KAAKgK,IAAMmZ,EAAKnD,MAAQvW,EAAGO,IAAImZ,EAAKnD,OAASvW,EAAG+X,KAAKxhB,KAAKwX,GAG1DxX,KAAKojB,KAAO,IAAI3Z,EAAG,GAAGmU,MAAM5d,KAAKgK,KACjChK,KAAKghB,IAAM,IAAIvX,EAAG,GAAGmU,MAAM5d,KAAKgK,KAChChK,KAAKqjB,IAAM,IAAI5Z,EAAG,GAAGmU,MAAM5d,KAAKgK,KAGhChK,KAAKI,EAAI+iB,EAAK/iB,GAAK,IAAIqJ,EAAG0Z,EAAK/iB,EAAG,IAClCJ,KAAKic,EAAIkH,EAAKlH,GAAKjc,KAAKsjB,cAAcH,EAAKlH,EAAGkH,EAAKI,MAGnDvjB,KAAKwjB,QAAU,IAAIxhB,MAAM,GACzBhC,KAAKyjB,QAAU,IAAIzhB,MAAM,GACzBhC,KAAK0jB,QAAU,IAAI1hB,MAAM,GACzBhC,KAAK2jB,QAAU,IAAI3hB,MAAM,GAGzB,IAAI4hB,EAAc5jB,KAAKI,GAAKJ,KAAKwX,EAAE0D,IAAIlb,KAAKI,IACvCwjB,GAAuC,EAAxBA,EAAY/G,KAAK,KACnC7c,KAAK6jB,KAAO,MAEZ7jB,KAAK8jB,eAAgB,EACrB9jB,KAAK6jB,KAAO7jB,KAAKI,EAAEwd,MAAM5d,KAAKgK,MAmNlC,SAAS+Z,EAAU7B,EAAOgB,GACxBljB,KAAKkiB,MAAQA,EACbliB,KAAKkjB,KAAOA,EACZljB,KAAKgkB,YAAc,MAnNrBtkB,EAAOD,QAAUwjB,GAEPhhB,UAAUgiB,MAAQ,WAC1B,MAAM,IAAIrjB,MAAM,oBAGlBqiB,EAAUhhB,UAAUiiB,SAAW,WAC7B,MAAM,IAAItjB,MAAM,oBAGlBqiB,EAAUhhB,UAAUkiB,aAAe,SAAsB3M,EAAGtK,GAC1DlE,EAAOwO,EAAEwM,aACT,IAAII,EAAU5M,EAAE6M,cAEZC,EAAMvB,EAAO7V,EAAG,GAChBqX,GAAK,GAAMH,EAAQI,KAAO,IAAOJ,EAAQI,KAAO,GAAM,EAAI,EAAI,GAClED,GAAK,EAIL,IADA,IAAIE,EAAO,GACF/d,EAAI,EAAGA,EAAI4d,EAAItjB,OAAQ0F,GAAK0d,EAAQI,KAAM,CACjD,IAAIE,EAAO,EACX,IAASxX,EAAIxG,EAAI0d,EAAQI,KAAO,EAAQ9d,GAALwG,EAAQA,IACzCwX,GAAQA,GAAQ,GAAKJ,EAAIpX,GAC3BuX,EAAKrhB,KAAKshB,GAKZ,IAFA,IAAIjkB,EAAIT,KAAK2kB,OAAO,KAAM,KAAM,MAC5B5X,EAAI/M,KAAK2kB,OAAO,KAAM,KAAM,MACvBhkB,EAAI4jB,EAAO,EAAJ5jB,EAAOA,IAAK,CAC1B,IAAS+F,EAAI,EAAGA,EAAI+d,EAAKzjB,OAAQ0F,IAAK,EAChCge,EAAOD,EAAK/d,MACH/F,EACXoM,EAAIA,EAAE6X,SAASR,EAAQS,OAAOne,IACvBge,KAAU/jB,IACjBoM,EAAIA,EAAE6X,SAASR,EAAQS,OAAOne,GAAG8I,QAErC/O,EAAIA,EAAEmQ,IAAI7D,GAEZ,OAAOtM,EAAEqkB,OAGX7B,EAAUhhB,UAAU8iB,SAAW,SAAkBvN,EAAGtK,GAClD,IAAIxB,EAAI,EAGJsZ,EAAYxN,EAAEyN,cAAcvZ,GAChCA,EAAIsZ,EAAU3D,IAQd,IAPA,IAAIA,EAAM2D,EAAUH,OAGhBP,EAAMvB,EAAO7V,EAAGxB,GAGhBiQ,EAAM3b,KAAK2kB,OAAO,KAAM,KAAM,MACzBhkB,EAAI2jB,EAAItjB,OAAS,EAAQ,GAALL,EAAQA,IAAK,CAExC,IAASuM,EAAI,EAAQ,GAALvM,GAAqB,IAAX2jB,EAAI3jB,GAAUA,IACtCuM,IAKF,GAJS,GAALvM,GACFuM,IACFyO,EAAMA,EAAIuJ,KAAKhY,GAEXvM,EAAI,EACN,MACF,IAAIwgB,EAAImD,EAAI3jB,GACZqI,EAAa,IAANmY,GAIHxF,EAHW,WAAXnE,EAAE0L,KAEI,EAAJ/B,EACIxF,EAAIiJ,SAASvD,EAAKF,EAAI,GAAM,IAE5BxF,EAAIiJ,SAASvD,GAAMF,EAAI,GAAM,GAAG3R,OAGhC,EAAJ2R,EACIxF,EAAI/K,IAAIyQ,EAAKF,EAAI,GAAM,IAEvBxF,EAAI/K,IAAIyQ,GAAMF,EAAI,GAAM,GAAG3R,OAGvC,MAAkB,WAAXgI,EAAE0L,KAAoBvH,EAAImJ,MAAQnJ,GAG3CsH,EAAUhhB,UAAUkjB,YAAc,SAAqBC,EACAP,EACAQ,EACA7a,EACA8a,GAOrD,IANA,IAAIC,EAAWvlB,KAAKwjB,QAChBnC,EAAMrhB,KAAKyjB,QACXa,EAAMtkB,KAAK0jB,QAGX5Y,EAAM,EACDnK,EAAI,EAAGA,EAAI6J,EAAK7J,IAAK,CAC5B,IACIqkB,GADAxN,EAAIqN,EAAOlkB,IACGskB,cAAcG,GAChCG,EAAS5kB,GAAKqkB,EAAU3D,IACxBA,EAAI1gB,GAAKqkB,EAAUH,OAIrB,IAASlkB,EAAI6J,EAAM,EAAQ,GAAL7J,EAAQA,GAAK,EAAG,CACpC,IAAIF,EAAIE,EAAI,EACRoM,EAAIpM,EACR,GAAoB,IAAhB4kB,EAAS9kB,IAA4B,IAAhB8kB,EAASxY,GAAlC,CAQA,IAAIyY,EAAO,CACTX,EAAOpkB,GACP,KACA,KACAokB,EAAO9X,IAI4B,IAAjC8X,EAAOpkB,GAAG2V,EAAEnL,IAAI4Z,EAAO9X,GAAGqJ,IAC5BoP,EAAK,GAAKX,EAAOpkB,GAAGmQ,IAAIiU,EAAO9X,IAC/ByY,EAAK,GAAKX,EAAOpkB,GAAGglB,MAAMb,SAASC,EAAO9X,GAAGyC,QACM,IAA1CqV,EAAOpkB,GAAG2V,EAAEnL,IAAI4Z,EAAO9X,GAAGqJ,EAAE8I,WACrCsG,EAAK,GAAKX,EAAOpkB,GAAGglB,MAAMb,SAASC,EAAO9X,IAC1CyY,EAAK,GAAKX,EAAOpkB,GAAGmQ,IAAIiU,EAAO9X,GAAGyC,SAElCgW,EAAK,GAAKX,EAAOpkB,GAAGglB,MAAMb,SAASC,EAAO9X,IAC1CyY,EAAK,GAAKX,EAAOpkB,GAAGglB,MAAMb,SAASC,EAAO9X,GAAGyC,QAG/C,IAAI/J,EAAQ,EACT,GACA,GACA,GACA,EACD,EACA,EACA,EACA,EACA,GAGEigB,EAAM1C,EAAOqC,EAAO5kB,GAAI4kB,EAAOtY,IACnCjC,EAAML,KAAKK,IAAI4a,EAAI,GAAG1kB,OAAQ8J,GAC9BwZ,EAAI7jB,GAAK,IAAIuB,MAAM8I,GACnBwZ,EAAIvX,GAAK,IAAI/K,MAAM8I,GACnB,IAAK,IAAIpE,EAAI,EAAGA,EAAIoE,EAAKpE,IAAK,CAC5B,IAAIif,EAAiB,EAAZD,EAAI,GAAGhf,GACZkf,EAAiB,EAAZF,EAAI,GAAGhf,GAEhB4d,EAAI7jB,GAAGiG,GAAKjB,EAAiB,GAAVkgB,EAAK,IAAUC,EAAK,IACvCtB,EAAIvX,GAAGrG,GAAK,EACZ2a,EAAI5gB,GAAK+kB,QAhDTlB,EAAI7jB,GAAKsiB,EAAOsC,EAAO5kB,GAAI8kB,EAAS9kB,IACpC6jB,EAAIvX,GAAKgW,EAAOsC,EAAOtY,GAAIwY,EAASxY,IACpCjC,EAAML,KAAKK,IAAIwZ,EAAI7jB,GAAGO,OAAQ8J,GAC9BA,EAAML,KAAKK,IAAIwZ,EAAIvX,GAAG/L,OAAQ8J,GAiDlC,IAAI6Q,EAAM3b,KAAK2kB,OAAO,KAAM,KAAM,MAC9BjF,EAAM1f,KAAK2jB,QACf,IAAShjB,EAAImK,EAAU,GAALnK,EAAQA,IAAK,CAG7B,IAFA,IAAIuM,EAAI,EAEI,GAALvM,GAAQ,CACb,IAAIyiB,GAAO,EACX,IAAS1c,EAAI,EAAGA,EAAI8D,EAAK9D,IACvBgZ,EAAIhZ,GAAiB,EAAZ4d,EAAI5d,GAAG/F,GACD,IAAX+e,EAAIhZ,KACN0c,GAAO,GAEX,IAAKA,EACH,MACFlW,IACAvM,IAKF,GAHS,GAALA,GACFuM,IACFyO,EAAMA,EAAIuJ,KAAKhY,GACXvM,EAAI,EACN,MAEF,IAAS+F,EAAI,EAAGA,EAAI8D,EAAK9D,IAAK,CAC5B,IACI8Q,EADA2J,EAAIzB,EAAIhZ,GAEF,IAANya,IAES,EAAJA,EACP3J,EAAI6J,EAAI3a,GAAIya,EAAI,GAAM,GACfA,EAAI,IACX3J,EAAI6J,EAAI3a,IAAKya,EAAI,GAAM,GAAG3R,OAG1BmM,EADa,WAAXnE,EAAE0L,KACEvH,EAAIiJ,SAASpN,GAEbmE,EAAI/K,IAAI4G,KAIpB,IAAS7W,EAAI,EAAGA,EAAI6J,EAAK7J,IACvB0gB,EAAI1gB,GAAK,KAEX,OAAI2kB,EACK3J,EAEAA,EAAImJ,QAQf7B,EAAUc,UAAYA,GAEZ9hB,UAAUyb,GAAK,WACvB,MAAM,IAAI9c,MAAM,oBAGlBmjB,EAAU9hB,UAAUiiB,SAAW,WAC7B,OAAOlkB,KAAKkiB,MAAMgC,SAASlkB,OAG7BijB,EAAUhhB,UAAU4jB,YAAc,SAAqBtiB,EAAOuiB,GAC5DviB,EAAQ6E,EAAMoD,QAAQjI,EAAOuiB,GAE7B,IAAItb,EAAMxK,KAAKwX,EAAEvJ,aAGjB,IAAkB,IAAb1K,EAAM,IAA4B,IAAbA,EAAM,IAA4B,IAAbA,EAAM,KACjDA,EAAMvC,OAAS,GAAM,EAAIwJ,EAS3B,OARiB,IAAbjH,EAAM,GACRyF,EAAOzF,EAAMA,EAAMvC,OAAS,GAAK,GAAM,GACnB,IAAbuC,EAAM,IACbyF,EAAOzF,EAAMA,EAAMvC,OAAS,GAAK,GAAM,GAE9BhB,KAAKikB,MAAM1gB,EAAMxB,MAAM,EAAG,EAAIyI,GACnBjH,EAAMxB,MAAM,EAAIyI,EAAK,EAAI,EAAIA,IAG9C,IAAkB,IAAbjH,EAAM,IAA4B,IAAbA,EAAM,KAC3BA,EAAMvC,OAAS,IAAMwJ,EAC/B,OAAOxK,KAAK+lB,WAAWxiB,EAAMxB,MAAM,EAAG,EAAIyI,GAAmB,IAAbjH,EAAM,IAExD,MAAM,IAAI3C,MAAM,yBAGlBmjB,EAAU9hB,UAAU+jB,iBAAmB,SAA0BF,GAC/D,OAAO9lB,KAAKimB,OAAOH,GAAK,IAG1B/B,EAAU9hB,UAAUikB,QAAU,SAAiBC,GAC7C,IAAI3b,EAAMxK,KAAKkiB,MAAM1K,EAAEvJ,aACnBkI,EAAInW,KAAKomB,OAAO5a,QAAQ,KAAMhB,GAElC,OAAI2b,EACK,CAAEnmB,KAAKqmB,OAAOnK,SAAW,EAAO,GAAOoK,OAAOnQ,GAEhD,CAAE,GAAOmQ,OAAOnQ,EAAGnW,KAAKqmB,OAAO7a,QAAQ,KAAMhB,KAGtDuZ,EAAU9hB,UAAUgkB,OAAS,SAAgBH,EAAKK,GAChD,OAAO/d,EAAM6d,OAAOjmB,KAAKkmB,QAAQC,GAAUL,IAG7C/B,EAAU9hB,UAAUskB,WAAa,SAAoBC,GACnD,GAAIxmB,KAAKgkB,YACP,OAAOhkB,KAET,IAAIgkB,EAAc,CAChBI,QAAS,KACTE,IAAK,KACLmC,KAAM,MAOR,OALAzC,EAAYM,IAAMtkB,KAAKilB,cAAc,GACrCjB,EAAYI,QAAUpkB,KAAKqkB,YAAY,EAAGmC,GAC1CxC,EAAYyC,KAAOzmB,KAAK0mB,WACxB1mB,KAAKgkB,YAAcA,EAEZhkB,MAGT+jB,EAAU9hB,UAAU0kB,YAAc,SAAqBzZ,GACrD,IAAKlN,KAAKgkB,YACR,OAAO,EAET,IAAII,EAAUpkB,KAAKgkB,YAAYI,QAC/B,QAAKA,GAGEA,EAAQS,OAAO7jB,QAAUyJ,KAAKgB,MAAMyB,EAAEyB,YAAc,GAAKyV,EAAQI,OAG1ET,EAAU9hB,UAAUoiB,YAAc,SAAqBG,EAAMgC,GAC3D,GAAIxmB,KAAKgkB,aAAehkB,KAAKgkB,YAAYI,QACvC,OAAOpkB,KAAKgkB,YAAYI,QAI1B,IAFA,IAAIA,EAAU,CAAEpkB,MACZ2b,EAAM3b,KACDW,EAAI,EAAGA,EAAI6lB,EAAO7lB,GAAK6jB,EAAM,CACpC,IAAK,IAAI9d,EAAI,EAAGA,EAAI8d,EAAM9d,IACxBiV,EAAMA,EAAIiL,MACZxC,EAAQhhB,KAAKuY,GAEf,MAAO,CACL6I,KAAMA,EACNK,OAAQT,IAIZL,EAAU9hB,UAAUgjB,cAAgB,SAAuB5D,GACzD,GAAIrhB,KAAKgkB,aAAehkB,KAAKgkB,YAAYM,IACvC,OAAOtkB,KAAKgkB,YAAYM,IAK1B,IAHA,IAAIlW,EAAM,CAAEpO,MACR8K,GAAO,GAAKuW,GAAO,EACnBuF,EAAc,IAAR9b,EAAY,KAAO9K,KAAK4mB,MACzBjmB,EAAI,EAAGA,EAAImK,EAAKnK,IACvByN,EAAIzN,GAAKyN,EAAIzN,EAAI,GAAGiQ,IAAIgW,GAC1B,MAAO,CACLvF,IAAKA,EACLwD,OAAQzW,IAIZ2V,EAAU9hB,UAAUykB,SAAW,WAC7B,OAAO,MAGT3C,EAAU9hB,UAAUijB,KAAO,SAAchY,GAEvC,IADA,IAAI7M,EAAIL,KACCW,EAAI,EAAGA,EAAIuM,EAAGvM,IACrBN,EAAIA,EAAEumB,MACR,OAAOvmB,IAGP,CAACwmB,iBAAiB,EAAEC,QAAQ,IAAIC,EAAE,CAAC,SAASrmB,EAAQhB,EAAOD,GAC7DC,EAAOD,QAAU,IACf,IAAIunB,EAAE,CAAC,SAAStmB,EAAQhB,EAAOD,GACjC,aAEA,IAAIyiB,EAAQziB,EAEZyiB,EAAMvY,KAAOjJ,EAAQ,UACrBwhB,EAAM+E,MAAQvmB,EAAQ,WACtBwhB,EAAMV,KAAO9gB,EAAQ,UACrBwhB,EAAMgF,QAAUxmB,EAAQ,cAEtB,CAACymB,SAAS,EAAEC,YAAY,EAAEC,SAAS,EAAEC,UAAU,KAAKC,EAAE,CAAC,SAAS7mB,EAAQhB,EAAOD,GACjF+nB,UAAU,GAAG,GAAG,GAAGC,MAAMhoB,EAAQ+nB,YAC/B,CAACE,IAAM,IAAIC,GAAG,CAAC,SAASjnB,EAAQhB,EAAOD,GACzC,aAEA,IAAIyiB,EAAQxhB,EAAQ,YAChBohB,EAAWphB,EAAQ,kBACnB+I,EAAK/I,EAAQ,SACbyI,EAAWzI,EAAQ,YACnBknB,EAAO1F,EAAMvY,KAEbX,EAAS8Y,EAAS1Z,MAAMY,OAE5B,SAAS6e,EAAW1E,GAClByE,EAAK7mB,KAAKf,KAAM,QAASmjB,GAEzBnjB,KAAKS,EAAI,IAAIgJ,EAAG0Z,EAAK1iB,EAAG,IAAImd,MAAM5d,KAAKgK,KACvChK,KAAK+M,EAAI,IAAItD,EAAG0Z,EAAKpW,EAAG,IAAI6Q,MAAM5d,KAAKgK,KACvChK,KAAK8nB,KAAO9nB,KAAKqjB,IAAIpE,UAErBjf,KAAK+nB,MAAqC,IAA7B/nB,KAAKS,EAAEud,UAAUnB,KAAK,GACnC7c,KAAKgoB,OAAmD,IAA1ChoB,KAAKS,EAAEud,UAAUnN,IAAI7Q,KAAKwX,GAAGqF,MAAM,GAGjD7c,KAAKioB,KAAOjoB,KAAKkoB,iBAAiB/E,GAClCnjB,KAAKmoB,YAAc,IAAInmB,MAAM,GAC7BhC,KAAKooB,YAAc,IAAIpmB,MAAM,GAoO/B,SAASqmB,EAAMnG,EAAO/L,EAAGC,EAAGkS,GAC1BV,EAAK7D,UAAUhjB,KAAKf,KAAMkiB,EAAO,UACvB,OAAN/L,GAAoB,OAANC,GAChBpW,KAAKmW,EAAI,KACTnW,KAAKoW,EAAI,KACTpW,KAAKuoB,KAAM,IAEXvoB,KAAKmW,EAAI,IAAI1M,EAAG0M,EAAG,IACnBnW,KAAKoW,EAAI,IAAI3M,EAAG2M,EAAG,IAEfkS,IACFtoB,KAAKmW,EAAE+H,SAASle,KAAKkiB,MAAMlY,KAC3BhK,KAAKoW,EAAE8H,SAASle,KAAKkiB,MAAMlY,MAExBhK,KAAKmW,EAAEnM,MACVhK,KAAKmW,EAAInW,KAAKmW,EAAEyH,MAAM5d,KAAKkiB,MAAMlY,MAC9BhK,KAAKoW,EAAEpM,MACVhK,KAAKoW,EAAIpW,KAAKoW,EAAEwH,MAAM5d,KAAKkiB,MAAMlY,MACnChK,KAAKuoB,KAAM,GA4Nf,SAASC,EAAOtG,EAAO/L,EAAGC,EAAG+K,GAC3ByG,EAAK7D,UAAUhjB,KAAKf,KAAMkiB,EAAO,YACvB,OAAN/L,GAAoB,OAANC,GAAoB,OAAN+K,GAC9BnhB,KAAKmW,EAAInW,KAAKkiB,MAAMlB,IACpBhhB,KAAKoW,EAAIpW,KAAKkiB,MAAMlB,IACpBhhB,KAAKmhB,EAAI,IAAI1X,EAAG,KAEhBzJ,KAAKmW,EAAI,IAAI1M,EAAG0M,EAAG,IACnBnW,KAAKoW,EAAI,IAAI3M,EAAG2M,EAAG,IACnBpW,KAAKmhB,EAAI,IAAI1X,EAAG0X,EAAG,KAEhBnhB,KAAKmW,EAAEnM,MACVhK,KAAKmW,EAAInW,KAAKmW,EAAEyH,MAAM5d,KAAKkiB,MAAMlY,MAC9BhK,KAAKoW,EAAEpM,MACVhK,KAAKoW,EAAIpW,KAAKoW,EAAEwH,MAAM5d,KAAKkiB,MAAMlY,MAC9BhK,KAAKmhB,EAAEnX,MACVhK,KAAKmhB,EAAInhB,KAAKmhB,EAAEvD,MAAM5d,KAAKkiB,MAAMlY,MAEnChK,KAAKyoB,KAAOzoB,KAAKmhB,IAAMnhB,KAAKkiB,MAAMlB,IAlepC7X,EAAS0e,EAAYD,IACrBloB,EAAOD,QAAUooB,GAEN5lB,UAAUimB,iBAAmB,SAA0B/E,GAEhE,GAAKnjB,KAAK+nB,OAAU/nB,KAAKic,GAAMjc,KAAKI,GAAwB,IAAnBJ,KAAKwX,EAAE/J,KAAK,GAArD,CAIA,IAAIgZ,EACAiC,EACJ,GAAIvF,EAAKsD,KACPA,EAAO,IAAIhd,EAAG0Z,EAAKsD,KAAM,IAAI7I,MAAM5d,KAAKgK,SACnC,CACL,IAAI2e,EAAQ3oB,KAAK4oB,cAAc5oB,KAAKwX,GAGpCiP,GADAA,EAAOkC,EAAM,GAAG1d,IAAI0d,EAAM,IAAM,EAAIA,EAAM,GAAKA,EAAM,IACzC/K,MAAM5d,KAAKgK,KAEzB,GAAImZ,EAAKuF,OACPA,EAAS,IAAIjf,EAAG0Z,EAAKuF,OAAQ,QACxB,CAEL,IAAIG,EAAU7oB,KAAK4oB,cAAc5oB,KAAKI,GACsB,IAAxDJ,KAAKic,EAAErR,IAAIie,EAAQ,IAAI1S,EAAElL,IAAIjL,KAAKic,EAAE9F,EAAEsI,OAAOgI,IAC/CiC,EAASG,EAAQ,IAEjBH,EAASG,EAAQ,GACjB7f,EAA2D,IAApDhJ,KAAKic,EAAErR,IAAI8d,GAAQvS,EAAElL,IAAIjL,KAAKic,EAAE9F,EAAEsI,OAAOgI,MAiBpD,MAAO,CACLA,KAAMA,EACNiC,OAAQA,EACRI,MAdE3F,EAAK2F,MACC3F,EAAK2F,MAAMC,IAAI,SAASC,GAC9B,MAAO,CACLvoB,EAAG,IAAIgJ,EAAGuf,EAAIvoB,EAAG,IACjBsM,EAAG,IAAItD,EAAGuf,EAAIjc,EAAG,OAIb/M,KAAKipB,cAAcP,MAU/Bb,EAAW5lB,UAAU2mB,cAAgB,SAAuB/d,GAI1D,IAAIb,EAAMa,IAAQ7K,KAAKwX,EAAIxX,KAAKgK,IAAMP,EAAG+X,KAAK3W,GAC1Cid,EAAO,IAAIre,EAAG,GAAGmU,MAAM5T,GAAKiV,UAC5BiK,EAAQpB,EAAK5I,SAEb5e,EAAI,IAAImJ,EAAG,GAAGmU,MAAM5T,GAAKkV,SAASH,UAAUN,OAAOqJ,GAIvD,MAAO,CAFEoB,EAAM/K,OAAO7d,GAAG0d,UAChBkL,EAAM7K,OAAO/d,GAAG0d,YAI3B6J,EAAW5lB,UAAUgnB,cAAgB,SAAuBP,GA2B1D,IAzBA,IAYI1X,EACA8B,EAEA3B,EACA8B,EAEA3B,EACA8B,EAEA+V,EAEA9oB,EACA8V,EAxBAiT,EAAWppB,KAAKI,EAAEga,MAAM3P,KAAK4e,MAAMrpB,KAAKI,EAAEuO,YAAc,IAIxDnO,EAAIkoB,EACJ9kB,EAAI5D,KAAKI,EAAEiM,QACXqQ,EAAK,IAAIjT,EAAG,GACZ6f,EAAK,IAAI7f,EAAG,GACZkT,EAAK,IAAIlT,EAAG,GACZ8f,EAAK,IAAI9f,EAAG,GAaZ9I,EAAI,EAGa,IAAdH,EAAEqc,KAAK,IAAU,CACtB,IAAIxO,EAAIzK,EAAEsX,IAAI1a,GACdH,EAAIuD,EAAEiN,IAAIxC,EAAEzD,IAAIpK,IAChB2V,EAAIwG,EAAG9L,IAAIxC,EAAEzD,IAAI8R,IACjB,IAAItG,EAAImT,EAAG1Y,IAAIxC,EAAEzD,IAAI0e,IAErB,IAAKnY,GAAM9Q,EAAE4K,IAAIme,GAAY,EAC3BpY,EAAKmY,EAAM3Z,MACXsD,EAAK4J,EACLvL,EAAK9Q,EAAEmP,MACPyD,EAAKkD,OACA,GAAIhF,GAAc,KAANxQ,EACjB,MAIFiD,EAAIpD,EACJA,EAHA2oB,EAAQ9oB,EAIRsc,EAAKD,EACLA,EAAKvG,EACLoT,EAAKD,EACLA,EAAKlT,EAEP9E,EAAKjR,EAAEmP,MACP4D,EAAK+C,EAEL,IAAIqT,EAAOrY,EAAGgI,MAAMvI,IAAIqC,EAAGkG,OAiB3B,OAfsB,GADX7H,EAAG6H,MAAMvI,IAAIwC,EAAG+F,OAClBlO,IAAIue,KACXlY,EAAKN,EACLoC,EAAKN,GAIH3B,EAAGrH,WACLqH,EAAKA,EAAG3B,MACRyD,EAAKA,EAAGzD,OAEN8B,EAAGxH,WACLwH,EAAKA,EAAG9B,MACR4D,EAAKA,EAAG5D,OAGH,CACL,CAAE/O,EAAG0Q,EAAIpE,EAAGkG,GACZ,CAAExS,EAAG6Q,EAAIvE,EAAGqG,KAIhByU,EAAW5lB,UAAUwnB,WAAa,SAAoBvc,GACpD,IAAI4b,EAAQ9oB,KAAKioB,KAAKa,MAClBY,EAAKZ,EAAM,GACXa,EAAKb,EAAM,GAEXc,EAAKD,EAAG5c,EAAEnC,IAAIsC,GAAGqO,SAASvb,KAAKI,GAC/BypB,EAAKH,EAAG3c,EAAEyC,MAAM5E,IAAIsC,GAAGqO,SAASvb,KAAKI,GAErC0pB,EAAKF,EAAGhf,IAAI8e,EAAGjpB,GACfspB,EAAKF,EAAGjf,IAAI+e,EAAGlpB,GACfupB,EAAKJ,EAAGhf,IAAI8e,EAAG3c,GACfkd,EAAKJ,EAAGjf,IAAI+e,EAAG5c,GAKnB,MAAO,CAAEmd,GAFAhd,EAAE2D,IAAIiZ,GAAIjZ,IAAIkZ,GAENI,GADRH,EAAGpZ,IAAIqZ,GAAIza,QAItBqY,EAAW5lB,UAAU8jB,WAAa,SAAoB5P,EAAG+B,IACvD/B,EAAI,IAAI1M,EAAG0M,EAAG,KACPnM,MACLmM,EAAIA,EAAEyH,MAAM5d,KAAKgK,MAEnB,IAAIuf,EAAKpT,EAAEyI,SAASH,OAAOtI,GAAGiI,QAAQjI,EAAEsI,OAAOze,KAAKS,IAAI2d,QAAQpe,KAAK+M,GACjEqJ,EAAImT,EAAGxK,UACX,GAA6C,IAAzC3I,EAAEwI,SAASP,OAAOkL,GAAIte,IAAIjL,KAAKojB,MACjC,MAAM,IAAIxiB,MAAM,iBAIlB,IAAI0b,EAAQlG,EAAE4H,UAAU1B,QAIxB,OAHIpE,IAAQoE,IAAUpE,GAAOoE,KAC3BlG,EAAIA,EAAE8I,UAEDlf,KAAKikB,MAAM9N,EAAGC,IAGvByR,EAAW5lB,UAAUiiB,SAAW,SAAkBD,GAChD,GAAIA,EAAMsE,IACR,OAAO,EAET,IAAIpS,EAAI8N,EAAM9N,EACVC,EAAI6N,EAAM7N,EAEVgU,EAAKpqB,KAAKS,EAAEge,OAAOtI,GACnBkU,EAAMlU,EAAEyI,SAASH,OAAOtI,GAAGiI,QAAQgM,GAAIhM,QAAQpe,KAAK+M,GACxD,OAA2C,IAApCqJ,EAAEwI,SAASN,QAAQ+L,GAAKxN,KAAK,IAGtCgL,EAAW5lB,UAAUqoB,gBACjB,SAAyBzF,EAAQQ,EAAQC,GAG3C,IAFA,IAAIiF,EAAUvqB,KAAKmoB,YACfqC,EAAUxqB,KAAKooB,YACVznB,EAAI,EAAGA,EAAIkkB,EAAO7jB,OAAQL,IAAK,CACtC,IAAI6f,EAAQxgB,KAAKypB,WAAWpE,EAAO1kB,IAC/B6W,EAAIqN,EAAOlkB,GACX8lB,EAAOjP,EAAEkP,WAETlG,EAAM0J,GAAGpgB,WACX0W,EAAM0J,GAAG5a,OACTkI,EAAIA,EAAEhI,KAAI,IAERgR,EAAM2J,GAAGrgB,WACX0W,EAAM2J,GAAG7a,OACTmX,EAAOA,EAAKjX,KAAI,IAGlB+a,EAAY,EAAJ5pB,GAAS6W,EACjB+S,EAAY,EAAJ5pB,EAAQ,GAAK8lB,EACrB+D,EAAY,EAAJ7pB,GAAS6f,EAAM0J,GACvBM,EAAY,EAAJ7pB,EAAQ,GAAK6f,EAAM2J,GAK7B,IAHA,IAAI/b,EAAMpO,KAAKmlB,YAAY,EAAGoF,EAASC,EAAa,EAAJ7pB,EAAO2kB,GAG9C5e,EAAI,EAAGA,EAAQ,EAAJ/F,EAAO+F,IACzB6jB,EAAQ7jB,GAAK,KACb8jB,EAAQ9jB,GAAK,KAEf,OAAO0H,GAwBTjF,EAASkf,EAAOT,EAAK7D,WAErB8D,EAAW5lB,UAAUgiB,MAAQ,SAAe9N,EAAGC,EAAGkS,GAChD,OAAO,IAAID,EAAMroB,KAAMmW,EAAGC,EAAGkS,IAG/BT,EAAW5lB,UAAUqhB,cAAgB,SAAuBmH,EAAKzgB,GAC/D,OAAOqe,EAAMqC,SAAS1qB,KAAMyqB,EAAKzgB,IAGnCqe,EAAMpmB,UAAUykB,SAAW,WACzB,GAAK1mB,KAAKkiB,MAAM+F,KAAhB,CAGA,IAAI0C,EAAM3qB,KAAKgkB,YACf,GAAI2G,GAAOA,EAAIlE,KACb,OAAOkE,EAAIlE,KAEb,IAAIA,EAAOzmB,KAAKkiB,MAAM+B,MAAMjkB,KAAKmW,EAAEsI,OAAOze,KAAKkiB,MAAM+F,KAAKxB,MAAOzmB,KAAKoW,GACtE,GAAIuU,EAAK,CACP,IAAIzI,EAAQliB,KAAKkiB,MACb0I,EAAU,SAASpT,GACrB,OAAO0K,EAAM+B,MAAMzM,EAAErB,EAAEsI,OAAOyD,EAAM+F,KAAKxB,MAAOjP,EAAEpB,KAEpDuU,EAAIlE,KAAOA,GACNzC,YAAc,CACjByC,KAAM,KACNnC,IAAKqG,EAAIrG,KAAO,CACdjD,IAAKsJ,EAAIrG,IAAIjD,IACbwD,OAAQ8F,EAAIrG,IAAIO,OAAOkE,IAAI6B,IAE7BxG,QAASuG,EAAIvG,SAAW,CACtBI,KAAMmG,EAAIvG,QAAQI,KAClBK,OAAQ8F,EAAIvG,QAAQS,OAAOkE,IAAI6B,KAIrC,OAAOnE,IAGT4B,EAAMpmB,UAAU4L,OAAS,WACvB,OAAK7N,KAAKgkB,YAGH,CAAEhkB,KAAKmW,EAAGnW,KAAKoW,EAAGpW,KAAKgkB,aAAe,CAC3CI,QAASpkB,KAAKgkB,YAAYI,SAAW,CACnCI,KAAMxkB,KAAKgkB,YAAYI,QAAQI,KAC/BK,OAAQ7kB,KAAKgkB,YAAYI,QAAQS,OAAO9iB,MAAM,IAEhDuiB,IAAKtkB,KAAKgkB,YAAYM,KAAO,CAC3BjD,IAAKrhB,KAAKgkB,YAAYM,IAAIjD,IAC1BwD,OAAQ7kB,KAAKgkB,YAAYM,IAAIO,OAAO9iB,MAAM,MATrC,CAAE/B,KAAKmW,EAAGnW,KAAKoW,IAc1BiS,EAAMqC,SAAW,SAAkBxI,EAAOuI,EAAKzgB,GAC1B,iBAARygB,IACTA,EAAMI,KAAKC,MAAML,IACnB,IAAIrc,EAAM8T,EAAM+B,MAAMwG,EAAI,GAAIA,EAAI,GAAIzgB,GACtC,IAAKygB,EAAI,GACP,OAAOrc,EAET,SAAS2c,EAAUN,GACjB,OAAOvI,EAAM+B,MAAMwG,EAAI,GAAIA,EAAI,GAAIzgB,GAGrC,IAAI2gB,EAAMF,EAAI,GAYd,OAXArc,EAAI4V,YAAc,CAChByC,KAAM,KACNrC,QAASuG,EAAIvG,SAAW,CACtBI,KAAMmG,EAAIvG,QAAQI,KAClBK,OAAQ,CAAEzW,GAAMkY,OAAOqE,EAAIvG,QAAQS,OAAOkE,IAAIgC,KAEhDzG,IAAKqG,EAAIrG,KAAO,CACdjD,IAAKsJ,EAAIrG,IAAIjD,IACbwD,OAAQ,CAAEzW,GAAMkY,OAAOqE,EAAIrG,IAAIO,OAAOkE,IAAIgC,MAGvC3c,GAGTia,EAAMpmB,UAAUwK,QAAU,WACxB,OAAIzM,KAAKgrB,aACA,sBACF,gBAAkBhrB,KAAKmW,EAAE6H,UAAU5S,SAAS,GAAI,GACnD,OAASpL,KAAKoW,EAAE4H,UAAU5S,SAAS,GAAI,GAAK,KAGlDid,EAAMpmB,UAAU+oB,WAAa,WAC3B,OAAOhrB,KAAKuoB,KAGdF,EAAMpmB,UAAU2O,IAAM,SAAa4G,GAEjC,GAAIxX,KAAKuoB,IACP,OAAO/Q,EAGT,GAAIA,EAAE+Q,IACJ,OAAOvoB,KAGT,GAAIA,KAAK0d,GAAGlG,GACV,OAAOxX,KAAK4mB,MAGd,GAAI5mB,KAAKwP,MAAMkO,GAAGlG,GAChB,OAAOxX,KAAKkiB,MAAM+B,MAAM,KAAM,MAGhC,GAAwB,IAApBjkB,KAAKmW,EAAElL,IAAIuM,EAAErB,GACf,OAAOnW,KAAKkiB,MAAM+B,MAAM,KAAM,MAEhC,IAAI/gB,EAAIlD,KAAKoW,EAAEiI,OAAO7G,EAAEpB,GACN,IAAdlT,EAAE2Z,KAAK,KACT3Z,EAAIA,EAAEub,OAAOze,KAAKmW,EAAEkI,OAAO7G,EAAErB,GAAG8I,YAClC,IAAIgM,EAAK/nB,EAAE0b,SAASN,QAAQte,KAAKmW,GAAGmI,QAAQ9G,EAAErB,GAC1C+U,EAAKhoB,EAAEub,OAAOze,KAAKmW,EAAEkI,OAAO4M,IAAK3M,QAAQte,KAAKoW,GAClD,OAAOpW,KAAKkiB,MAAM+B,MAAMgH,EAAIC,IAG9B7C,EAAMpmB,UAAU2kB,IAAM,WACpB,GAAI5mB,KAAKuoB,IACP,OAAOvoB,KAGT,IAAImrB,EAAMnrB,KAAKoW,EAAE+H,OAAOne,KAAKoW,GAC7B,GAAoB,IAAhB+U,EAAItO,KAAK,GACX,OAAO7c,KAAKkiB,MAAM+B,MAAM,KAAM,MAEhC,IAAIxjB,EAAIT,KAAKkiB,MAAMzhB,EAEfkc,EAAK3c,KAAKmW,EAAEyI,SACZwM,EAAQD,EAAIlM,UACZ/b,EAAIyZ,EAAGwB,OAAOxB,GAAIyB,QAAQzB,GAAIyB,QAAQ3d,GAAGge,OAAO2M,GAEhDH,EAAK/nB,EAAE0b,SAASN,QAAQte,KAAKmW,EAAEgI,OAAOne,KAAKmW,IAC3C+U,EAAKhoB,EAAEub,OAAOze,KAAKmW,EAAEkI,OAAO4M,IAAK3M,QAAQte,KAAKoW,GAClD,OAAOpW,KAAKkiB,MAAM+B,MAAMgH,EAAIC,IAG9B7C,EAAMpmB,UAAUmkB,KAAO,WACrB,OAAOpmB,KAAKmW,EAAE6H,WAGhBqK,EAAMpmB,UAAUokB,KAAO,WACrB,OAAOrmB,KAAKoW,EAAE4H,WAGhBqK,EAAMpmB,UAAU2I,IAAM,SAAasC,GAGjC,OAFAA,EAAI,IAAIzD,EAAGyD,EAAG,IAEVlN,KAAK2mB,YAAYzZ,GACZlN,KAAKkiB,MAAMiC,aAAankB,KAAMkN,GAC9BlN,KAAKkiB,MAAM+F,KACXjoB,KAAKkiB,MAAMoI,gBAAgB,CAAEtqB,MAAQ,CAAEkN,IAEvClN,KAAKkiB,MAAM6C,SAAS/kB,KAAMkN,IAGrCmb,EAAMpmB,UAAUopB,OAAS,SAAgBnB,EAAIH,EAAII,GAC/C,IAAItF,EAAS,CAAE7kB,KAAM+pB,GACjB1E,EAAS,CAAE6E,EAAIC,GACnB,OAAInqB,KAAKkiB,MAAM+F,KACNjoB,KAAKkiB,MAAMoI,gBAAgBzF,EAAQQ,GAEnCrlB,KAAKkiB,MAAMiD,YAAY,EAAGN,EAAQQ,EAAQ,IAGrDgD,EAAMpmB,UAAUqpB,QAAU,SAAiBpB,EAAIH,EAAII,GACjD,IAAItF,EAAS,CAAE7kB,KAAM+pB,GACjB1E,EAAS,CAAE6E,EAAIC,GACnB,OAAInqB,KAAKkiB,MAAM+F,KACNjoB,KAAKkiB,MAAMoI,gBAAgBzF,EAAQQ,GAAQ,GAE3CrlB,KAAKkiB,MAAMiD,YAAY,EAAGN,EAAQQ,EAAQ,GAAG,IAGxDgD,EAAMpmB,UAAUyb,GAAK,SAAYlG,GAC/B,OAAOxX,OAASwX,GACTxX,KAAKuoB,MAAQ/Q,EAAE+Q,MACVvoB,KAAKuoB,KAA2B,IAApBvoB,KAAKmW,EAAElL,IAAIuM,EAAErB,IAAgC,IAApBnW,KAAKoW,EAAEnL,IAAIuM,EAAEpB,KAGhEiS,EAAMpmB,UAAUuN,IAAM,SAAa+b,GACjC,GAAIvrB,KAAKuoB,IACP,OAAOvoB,KAET,IAAIoO,EAAMpO,KAAKkiB,MAAM+B,MAAMjkB,KAAKmW,EAAGnW,KAAKoW,EAAE8I,UAC1C,GAAIqM,GAAevrB,KAAKgkB,YAAa,CACnC,IAAI2G,EAAM3qB,KAAKgkB,YACXwH,EAAS,SAAShU,GACpB,OAAOA,EAAEhI,OAEXpB,EAAI4V,YAAc,CAChBM,IAAKqG,EAAIrG,KAAO,CACdjD,IAAKsJ,EAAIrG,IAAIjD,IACbwD,OAAQ8F,EAAIrG,IAAIO,OAAOkE,IAAIyC,IAE7BpH,QAASuG,EAAIvG,SAAW,CACtBI,KAAMmG,EAAIvG,QAAQI,KAClBK,OAAQ8F,EAAIvG,QAAQS,OAAOkE,IAAIyC,KAIrC,OAAOpd,GAGTia,EAAMpmB,UAAUwjB,IAAM,WACpB,OAAIzlB,KAAKuoB,IACAvoB,KAAKkiB,MAAMyC,OAAO,KAAM,KAAM,MAE7B3kB,KAAKkiB,MAAMyC,OAAO3kB,KAAKmW,EAAGnW,KAAKoW,EAAGpW,KAAKkiB,MAAMlB,MAwBzD7X,EAASqf,EAAQZ,EAAK7D,WAEtB8D,EAAW5lB,UAAU0iB,OAAS,SAAgBxO,EAAGC,EAAG+K,GAClD,OAAO,IAAIqH,EAAOxoB,KAAMmW,EAAGC,EAAG+K,IAGhCqH,EAAOvmB,UAAU6iB,IAAM,WACrB,GAAI9kB,KAAKgrB,aACP,OAAOhrB,KAAKkiB,MAAM+B,MAAM,KAAM,MAEhC,IAAIwH,EAAOzrB,KAAKmhB,EAAElC,UACdyM,EAAQD,EAAK7M,SACbwL,EAAKpqB,KAAKmW,EAAEsI,OAAOiN,GACnBC,EAAK3rB,KAAKoW,EAAEqI,OAAOiN,GAAOjN,OAAOgN,GAErC,OAAOzrB,KAAKkiB,MAAM+B,MAAMmG,EAAIuB,IAG9BnD,EAAOvmB,UAAUuN,IAAM,WACrB,OAAOxP,KAAKkiB,MAAMyC,OAAO3kB,KAAKmW,EAAGnW,KAAKoW,EAAE8I,SAAUlf,KAAKmhB,IAGzDqH,EAAOvmB,UAAU2O,IAAM,SAAa4G,GAElC,GAAIxX,KAAKgrB,aACP,OAAOxT,EAGT,GAAIA,EAAEwT,aACJ,OAAOhrB,KAGT,IAAI4rB,EAAMpU,EAAE2J,EAAEvC,SACViN,EAAK7rB,KAAKmhB,EAAEvC,SACZkN,EAAK9rB,KAAKmW,EAAEsI,OAAOmN,GACnBG,EAAKvU,EAAErB,EAAEsI,OAAOoN,GAChBG,EAAKhsB,KAAKoW,EAAEqI,OAAOmN,EAAInN,OAAOjH,EAAE2J,IAChC8K,EAAKzU,EAAEpB,EAAEqI,OAAOoN,EAAGpN,OAAOze,KAAKmhB,IAE/BtH,EAAIiS,EAAGzN,OAAO0N,GACd1rB,EAAI2rB,EAAG3N,OAAO4N,GAClB,GAAkB,IAAdpS,EAAEgD,KAAK,GACT,OAAkB,IAAdxc,EAAEwc,KAAK,GACF7c,KAAKkiB,MAAMyC,OAAO,KAAM,KAAM,MAE9B3kB,KAAK4mB,MAGhB,IAAIsF,EAAKrS,EAAE+E,SACPuN,EAAKD,EAAGzN,OAAO5E,GACfjW,EAAIkoB,EAAGrN,OAAOyN,GAEdjB,EAAK5qB,EAAEue,SAASR,QAAQ+N,GAAI7N,QAAQ1a,GAAG0a,QAAQ1a,GAC/CsnB,EAAK7qB,EAAEoe,OAAO7a,EAAE0a,QAAQ2M,IAAK3M,QAAQ0N,EAAGvN,OAAO0N,IAC/CC,EAAKpsB,KAAKmhB,EAAE1C,OAAOjH,EAAE2J,GAAG1C,OAAO5E,GAEnC,OAAO7Z,KAAKkiB,MAAMyC,OAAOsG,EAAIC,EAAIkB,IAGnC5D,EAAOvmB,UAAU2iB,SAAW,SAAkBpN,GAE5C,GAAIxX,KAAKgrB,aACP,OAAOxT,EAAEiO,MAGX,GAAIjO,EAAEwT,aACJ,OAAOhrB,KAGT,IAAI6rB,EAAK7rB,KAAKmhB,EAAEvC,SACZkN,EAAK9rB,KAAKmW,EACV4V,EAAKvU,EAAErB,EAAEsI,OAAOoN,GAChBG,EAAKhsB,KAAKoW,EACV6V,EAAKzU,EAAEpB,EAAEqI,OAAOoN,GAAIpN,OAAOze,KAAKmhB,GAEhCtH,EAAIiS,EAAGzN,OAAO0N,GACd1rB,EAAI2rB,EAAG3N,OAAO4N,GAClB,GAAkB,IAAdpS,EAAEgD,KAAK,GACT,OAAkB,IAAdxc,EAAEwc,KAAK,GACF7c,KAAKkiB,MAAMyC,OAAO,KAAM,KAAM,MAE9B3kB,KAAK4mB,MAGhB,IAAIsF,EAAKrS,EAAE+E,SACPuN,EAAKD,EAAGzN,OAAO5E,GACfjW,EAAIkoB,EAAGrN,OAAOyN,GAEdjB,EAAK5qB,EAAEue,SAASR,QAAQ+N,GAAI7N,QAAQ1a,GAAG0a,QAAQ1a,GAC/CsnB,EAAK7qB,EAAEoe,OAAO7a,EAAE0a,QAAQ2M,IAAK3M,QAAQ0N,EAAGvN,OAAO0N,IAC/CC,EAAKpsB,KAAKmhB,EAAE1C,OAAO5E,GAEvB,OAAO7Z,KAAKkiB,MAAMyC,OAAOsG,EAAIC,EAAIkB,IAGnC5D,EAAOvmB,UAAUijB,KAAO,SAAc/Y,GACpC,GAAY,IAARA,EACF,OAAOnM,KACT,GAAIA,KAAKgrB,aACP,OAAOhrB,KACT,IAAKmM,EACH,OAAOnM,KAAK4mB,MAEd,GAAI5mB,KAAKkiB,MAAM6F,OAAS/nB,KAAKkiB,MAAM8F,OAAQ,CAEzC,IADA,IAAI3nB,EAAIL,KACCW,EAAI,EAAGA,EAAIwL,EAAKxL,IACvBN,EAAIA,EAAEumB,MACR,OAAOvmB,EAKT,IAAII,EAAIT,KAAKkiB,MAAMzhB,EACfqnB,EAAO9nB,KAAKkiB,MAAM4F,KAElBuE,EAAKrsB,KAAKmW,EACVmW,EAAKtsB,KAAKoW,EACVmW,EAAKvsB,KAAKmhB,EACVqL,EAAMD,EAAG3N,SAASA,SAGlB6N,EAAMH,EAAGnO,OAAOmO,GACpB,IAAS3rB,EAAI,EAAGA,EAAIwL,EAAKxL,IAAK,CAC5B,IAAI+rB,EAAML,EAAGzN,SACT+N,EAAOF,EAAI7N,SACXgO,EAAOD,EAAK/N,SACZ1b,EAAIwpB,EAAIvO,OAAOuO,GAAKtO,QAAQsO,GAAKtO,QAAQ3d,EAAEge,OAAO+N,IAElDK,EAAKR,EAAG5N,OAAOkO,GACf1B,EAAK/nB,EAAE0b,SAASN,QAAQuO,EAAG1O,OAAO0O,IAClCC,EAAKD,EAAGvO,QAAQ2M,GAChB8B,EAAM7pB,EAAEub,OAAOqO,GACnBC,EAAMA,EAAI3O,QAAQ2O,GAAKzO,QAAQsO,GAC/B,IAAIR,EAAKK,EAAIhO,OAAO8N,GAChB5rB,EAAI,EAAIwL,IACVqgB,EAAMA,EAAI/N,OAAOmO,IAEnBP,EAAKpB,EACLsB,EAAKH,EACLK,EAAMM,EAGR,OAAO/sB,KAAKkiB,MAAMyC,OAAO0H,EAAII,EAAIhO,OAAOqJ,GAAOyE,IAGjD/D,EAAOvmB,UAAU2kB,IAAM,WACrB,OAAI5mB,KAAKgrB,aACAhrB,KAELA,KAAKkiB,MAAM6F,MACN/nB,KAAKgtB,WACLhtB,KAAKkiB,MAAM8F,OACXhoB,KAAKitB,YAELjtB,KAAKktB,QAGhB1E,EAAOvmB,UAAU+qB,SAAW,WAC1B,IAAI/B,EACAC,EACAkB,EAEJ,GAAIpsB,KAAKyoB,KAAM,CAMb,IAAI0E,EAAKntB,KAAKmW,EAAEyI,SAEZwO,EAAKptB,KAAKoW,EAAEwI,SAEZyO,EAAOD,EAAGxO,SAEVte,EAAIN,KAAKmW,EAAEgI,OAAOiP,GAAIxO,SAASN,QAAQ6O,GAAI7O,QAAQ+O,GACvD/sB,EAAIA,EAAE8d,QAAQ9d,GAEd,IAAI2X,EAAIkV,EAAGhP,OAAOgP,GAAI/O,QAAQ+O,GAE1BhtB,EAAI8X,EAAE2G,SAASN,QAAQhe,GAAGge,QAAQhe,GAGlCgtB,EAAQD,EAAKjP,QAAQiP,GAEzBC,GADAA,EAAQA,EAAMlP,QAAQkP,IACRlP,QAAQkP,GAGtBrC,EAAK9qB,EAEL+qB,EAAKjT,EAAEwG,OAAOne,EAAEge,QAAQne,IAAIme,QAAQgP,GAEpClB,EAAKpsB,KAAKoW,EAAE+H,OAAOne,KAAKoW,OACnB,CAML,IAAI3V,EAAIT,KAAKmW,EAAEyI,SAEX7R,EAAI/M,KAAKoW,EAAEwI,SAEX1b,EAAI6J,EAAE6R,SAEN2O,EAAIvtB,KAAKmW,EAAEgI,OAAOpR,GAAG6R,SAASN,QAAQ7d,GAAG6d,QAAQpb,GACrDqqB,EAAIA,EAAEnP,QAAQmP,GAEd,IAAIrtB,EAAIO,EAAE0d,OAAO1d,GAAG2d,QAAQ3d,GAExBjB,EAAIU,EAAE0e,SAGN4O,EAAKtqB,EAAEkb,QAAQlb,GAEnBsqB,GADAA,EAAKA,EAAGpP,QAAQoP,IACRpP,QAAQoP,GAGhBvC,EAAKzrB,EAAE8e,QAAQiP,GAAGjP,QAAQiP,GAE1BrC,EAAKhrB,EAAEue,OAAO8O,EAAEjP,QAAQ2M,IAAK3M,QAAQkP,GAGrCpB,GADAA,EAAKpsB,KAAKoW,EAAEqI,OAAOze,KAAKmhB,IAChB/C,QAAQgO,GAGlB,OAAOpsB,KAAKkiB,MAAMyC,OAAOsG,EAAIC,EAAIkB,IAGnC5D,EAAOvmB,UAAUgrB,UAAY,WAC3B,IAAIhC,EACAC,EACAkB,EAEJ,GAAIpsB,KAAKyoB,KAAM,CAMb,IAAI0E,EAAKntB,KAAKmW,EAAEyI,SAEZwO,EAAKptB,KAAKoW,EAAEwI,SAEZyO,EAAOD,EAAGxO,SAEVte,EAAIN,KAAKmW,EAAEgI,OAAOiP,GAAIxO,SAASN,QAAQ6O,GAAI7O,QAAQ+O,GACvD/sB,EAAIA,EAAE8d,QAAQ9d,GAEd,IAAI2X,EAAIkV,EAAGhP,OAAOgP,GAAI/O,QAAQ+O,GAAI/O,QAAQpe,KAAKkiB,MAAMzhB,GAEjDN,EAAI8X,EAAE2G,SAASN,QAAQhe,GAAGge,QAAQhe,GAEtC2qB,EAAK9qB,EAEL,IAAImtB,EAAQD,EAAKjP,QAAQiP,GAEzBC,GADAA,EAAQA,EAAMlP,QAAQkP,IACRlP,QAAQkP,GACtBpC,EAAKjT,EAAEwG,OAAOne,EAAEge,QAAQne,IAAIme,QAAQgP,GAEpClB,EAAKpsB,KAAKoW,EAAE+H,OAAOne,KAAKoW,OACnB,CAKL,IAAIwG,EAAQ5c,KAAKmhB,EAAEvC,SAEf6O,EAAQztB,KAAKoW,EAAEwI,SAEf6H,EAAOzmB,KAAKmW,EAAEsI,OAAOgP,GAErBC,EAAQ1tB,KAAKmW,EAAEkI,OAAOzB,GAAO6B,OAAOze,KAAKmW,EAAEgI,OAAOvB,IACtD8Q,EAAQA,EAAMvP,OAAOuP,GAAOtP,QAAQsP,GAEpC,IAAIC,EAAQlH,EAAKrI,QAAQqI,GAErBmH,GADJD,EAAQA,EAAMvP,QAAQuP,IACJxP,OAAOwP,GACzB1C,EAAKyC,EAAM9O,SAASN,QAAQsP,GAE5BxB,EAAKpsB,KAAKoW,EAAE+H,OAAOne,KAAKmhB,GAAGvC,SAASN,QAAQmP,GAAOnP,QAAQ1B,GAE3D,IAAIiR,EAAUJ,EAAM7O,SAGpBiP,GADAA,GADAA,EAAUA,EAAQzP,QAAQyP,IACRzP,QAAQyP,IACRzP,QAAQyP,GAC1B3C,EAAKwC,EAAMjP,OAAOkP,EAAMrP,QAAQ2M,IAAK3M,QAAQuP,GAG/C,OAAO7tB,KAAKkiB,MAAMyC,OAAOsG,EAAIC,EAAIkB,IAGnC5D,EAAOvmB,UAAUirB,KAAO,WACtB,IAAIzsB,EAAIT,KAAKkiB,MAAMzhB,EAGf4rB,EAAKrsB,KAAKmW,EACVmW,EAAKtsB,KAAKoW,EACVmW,EAAKvsB,KAAKmhB,EACVqL,EAAMD,EAAG3N,SAASA,SAElB8N,EAAML,EAAGzN,SACTkP,EAAMxB,EAAG1N,SAET1b,EAAIwpB,EAAIvO,OAAOuO,GAAKtO,QAAQsO,GAAKtO,QAAQ3d,EAAEge,OAAO+N,IAElDuB,EAAO1B,EAAGlO,OAAOkO,GAEjBQ,GADJkB,EAAOA,EAAK3P,QAAQ2P,IACNtP,OAAOqP,GACjB7C,EAAK/nB,EAAE0b,SAASN,QAAQuO,EAAG1O,OAAO0O,IAClCC,EAAKD,EAAGvO,QAAQ2M,GAEhB+C,EAAOF,EAAIlP,SAGfoP,GADAA,GADAA,EAAOA,EAAK5P,QAAQ4P,IACR5P,QAAQ4P,IACR5P,QAAQ4P,GACpB,IAAI9C,EAAKhoB,EAAEub,OAAOqO,GAAIxO,QAAQ0P,GAC1B5B,EAAKE,EAAGnO,OAAOmO,GAAI7N,OAAO8N,GAE9B,OAAOvsB,KAAKkiB,MAAMyC,OAAOsG,EAAIC,EAAIkB,IAGnC5D,EAAOvmB,UAAUgsB,KAAO,WACtB,IAAKjuB,KAAKkiB,MAAM6F,MACd,OAAO/nB,KAAK4mB,MAAMhW,IAAI5Q,MAMxB,IAAImtB,EAAKntB,KAAKmW,EAAEyI,SAEZwO,EAAKptB,KAAKoW,EAAEwI,SAEZsP,EAAKluB,KAAKmhB,EAAEvC,SAEZyO,EAAOD,EAAGxO,SAEV3G,EAAIkV,EAAGhP,OAAOgP,GAAI/O,QAAQ+O,GAE1BgB,EAAKlW,EAAE2G,SAEP1e,EAAIF,KAAKmW,EAAEgI,OAAOiP,GAAIxO,SAASN,QAAQ6O,GAAI7O,QAAQ+O,GAKnDe,GAFJluB,GADAA,GADAA,EAAIA,EAAEke,QAAQle,IACRie,OAAOje,GAAGke,QAAQle,IAClBoe,QAAQ6P,IAEHvP,SAEPze,EAAIktB,EAAKjP,QAAQiP,GAGrBltB,GADAA,GADAA,EAAIA,EAAEie,QAAQje,IACRie,QAAQje,IACRie,QAAQje,GAEd,IAAIK,EAAIyX,EAAEmG,QAAQle,GAAG0e,SAASN,QAAQ6P,GAAI7P,QAAQ8P,GAAI9P,QAAQne,GAE1DkuB,EAAOjB,EAAG3O,OAAOje,GAErB6tB,GADAA,EAAOA,EAAKjQ,QAAQiQ,IACRjQ,QAAQiQ,GACpB,IAAIpD,EAAKjrB,KAAKmW,EAAEsI,OAAO2P,GAAI9P,QAAQ+P,GAEnCpD,GADAA,EAAKA,EAAG7M,QAAQ6M,IACR7M,QAAQ6M,GAEhB,IAAIC,EAAKlrB,KAAKoW,EAAEqI,OAAOje,EAAEie,OAAOte,EAAEme,QAAQ9d,IAAI8d,QAAQpe,EAAEue,OAAO2P,KAG/DlD,GADAA,GADAA,EAAKA,EAAG9M,QAAQ8M,IACR9M,QAAQ8M,IACR9M,QAAQ8M,GAEhB,IAAIkB,EAAKpsB,KAAKmhB,EAAEhD,OAAOje,GAAG0e,SAASN,QAAQ4P,GAAI5P,QAAQ8P,GAEvD,OAAOpuB,KAAKkiB,MAAMyC,OAAOsG,EAAIC,EAAIkB,IAGnC5D,EAAOvmB,UAAU2I,IAAM,SAAasC,EAAGohB,GAGrC,OAFAphB,EAAI,IAAIzD,EAAGyD,EAAGohB,GAEPtuB,KAAKkiB,MAAM6C,SAAS/kB,KAAMkN,IAGnCsb,EAAOvmB,UAAUyb,GAAK,SAAYlG,GAChC,GAAe,WAAXA,EAAE0L,KACJ,OAAOljB,KAAK0d,GAAGlG,EAAEiO,OAEnB,GAAIzlB,OAASwX,EACX,OAAO,EAGT,IAAIqU,EAAK7rB,KAAKmhB,EAAEvC,SACZgN,EAAMpU,EAAE2J,EAAEvC,SACd,GAA2D,IAAvD5e,KAAKmW,EAAEsI,OAAOmN,GAAKtN,QAAQ9G,EAAErB,EAAEsI,OAAOoN,IAAKhP,KAAK,GAClD,OAAO,EAGT,IAAI0R,EAAK1C,EAAGpN,OAAOze,KAAKmhB,GACpBqN,EAAM5C,EAAInN,OAAOjH,EAAE2J,GACvB,OAA8D,IAAvDnhB,KAAKoW,EAAEqI,OAAO+P,GAAKlQ,QAAQ9G,EAAEpB,EAAEqI,OAAO8P,IAAK1R,KAAK,IAGzD2L,EAAOvmB,UAAUwsB,OAAS,SAAgBtY,GACxC,IAAIuY,EAAK1uB,KAAKmhB,EAAEvC,SACZ7G,EAAK5B,EAAEyH,MAAM5d,KAAKkiB,MAAMlY,KAAKyU,OAAOiQ,GACxC,GAAuB,IAAnB1uB,KAAKmW,EAAElL,IAAI8M,GACb,OAAO,EAIT,IAFA,IAAI4W,EAAKxY,EAAE9J,QACPlM,EAAIH,KAAKkiB,MAAM2B,KAAKpF,OAAOiQ,KACtB,CAEP,GADAC,EAAGje,KAAK1Q,KAAKkiB,MAAM9hB,GACS,GAAxBuuB,EAAG1jB,IAAIjL,KAAKkiB,MAAM1K,GACpB,OAAO,EAGT,GADAO,EAAGqG,QAAQje,GACY,IAAnBH,KAAKmW,EAAElL,IAAI8M,GACb,OAAO,EAEX,OAAO,GAGTyQ,EAAOvmB,UAAUwK,QAAU,WACzB,OAAIzM,KAAKgrB,aACA,uBACF,iBAAmBhrB,KAAKmW,EAAE/K,SAAS,GAAI,GAC1C,OAASpL,KAAKoW,EAAEhL,SAAS,GAAI,GAC7B,OAASpL,KAAKmhB,EAAE/V,SAAS,GAAI,GAAK,KAGxCod,EAAOvmB,UAAU+oB,WAAa,WAE5B,OAA0B,IAAnBhrB,KAAKmhB,EAAEtE,KAAK,KAGnB,CAACgK,iBAAiB,EAAE+H,WAAW,EAAE9H,QAAQ,EAAE3d,SAAW,KAAK0lB,GAAG,CAAC,SAASnuB,EAAQhB,EAAOD,GACzF,aAEA,IAqKIkrB,EArKAxI,EAAS1iB,EAETqvB,EAAOpuB,EAAQ,WACfohB,EAAWphB,EAAQ,eAEnBsI,EAAS8Y,EAAS1Z,MAAMY,OAE5B,SAAS+lB,EAAYC,GACE,UAAjBA,EAAQ9L,KACVljB,KAAKkiB,MAAQ,IAAIJ,EAASI,MAAM+E,MAAM+H,GACd,YAAjBA,EAAQ9L,KACfljB,KAAKkiB,MAAQ,IAAIJ,EAASI,MAAMgF,QAAQ8H,GAExChvB,KAAKkiB,MAAQ,IAAIJ,EAASI,MAAMV,KAAKwN,GACvChvB,KAAKic,EAAIjc,KAAKkiB,MAAMjG,EACpBjc,KAAKI,EAAIJ,KAAKkiB,MAAM9hB,EACpBJ,KAAK8uB,KAAOE,EAAQF,KAEpB9lB,EAAOhJ,KAAKic,EAAEiI,WAAY,iBAC1Blb,EAAOhJ,KAAKic,EAAErR,IAAI5K,KAAKI,GAAG4qB,aAAc,2BAI1C,SAASiE,EAAYntB,EAAMktB,GACzB7pB,OAAOC,eAAe+c,EAAQrgB,EAAM,CAClCotB,cAAc,EACdC,YAAY,EACZC,IAAK,WACH,IAAIlN,EAAQ,IAAI6M,EAAYC,GAM5B,OALA7pB,OAAOC,eAAe+c,EAAQrgB,EAAM,CAClCotB,cAAc,EACdC,YAAY,EACZ/tB,MAAO8gB,IAEFA,KAbbC,EAAO4M,YAAcA,EAkBrBE,EAAY,OAAQ,CAClB/L,KAAM,QACNlD,MAAO,OACPxI,EAAG,wDACH/W,EAAG,wDACHsM,EAAG,wDACH3M,EAAG,wDACH0uB,KAAMA,EAAKO,OACX9L,MAAM,EACNtH,EAAG,CACD,wDACA,2DAIJgT,EAAY,OAAQ,CAClB/L,KAAM,QACNlD,MAAO,OACPxI,EAAG,iEACH/W,EAAG,iEACHsM,EAAG,iEACH3M,EAAG,iEACH0uB,KAAMA,EAAKO,OACX9L,MAAM,EACNtH,EAAG,CACD,iEACA,oEAIJgT,EAAY,OAAQ,CAClB/L,KAAM,QACNlD,MAAO,KACPxI,EAAG,0EACH/W,EAAG,0EACHsM,EAAG,0EACH3M,EAAG,0EACH0uB,KAAMA,EAAKO,OACX9L,MAAM,EACNtH,EAAG,CACD,0EACA,6EAIJgT,EAAY,OAAQ,CAClB/L,KAAM,QACNlD,MAAO,KACPxI,EAAG,8GAEH/W,EAAG,8GAEHsM,EAAG,8GAEH3M,EAAG,8GAEH0uB,KAAMA,EAAKQ,OACX/L,MAAM,EACNtH,EAAG,CACD,8GAEA,iHAKJgT,EAAY,OAAQ,CAClB/L,KAAM,QACNlD,MAAO,KACPxI,EAAG,2JAGH/W,EAAG,2JAGHsM,EAAG,2JAGH3M,EAAG,2JAGH0uB,KAAMA,EAAKS,OACXhM,MAAM,EACNtH,EAAG,CACD,2JAGA,8JAMJgT,EAAY,aAAc,CACxB/L,KAAM,OACNlD,MAAO,SACPxI,EAAG,sEACH/W,EAAG,QACHsM,EAAG,IACH3M,EAAG,sEACH0uB,KAAMA,EAAKO,OACX9L,MAAM,EACNtH,EAAG,CACD,OAIJgT,EAAY,UAAW,CACrB/L,KAAM,UACNlD,MAAO,SACPxI,EAAG,sEACH/W,EAAG,KACHyC,EAAG,IAEHqqB,EAAG,sEACHntB,EAAG,sEACH0uB,KAAMA,EAAKO,OACX9L,MAAM,EACNtH,EAAG,CACD,mEAGA,sEAKJ,IACE0O,EAAMjqB,EAAQ,2BACd,MAAOR,GACPyqB,OAAM6E,EAGRP,EAAY,YAAa,CACvB/L,KAAM,QACNlD,MAAO,OACPxI,EAAG,0EACH/W,EAAG,IACHsM,EAAG,IACH3M,EAAG,0EACHyZ,EAAG,IACHiV,KAAMA,EAAKO,OAGX5I,KAAM,mEACNiC,OAAQ,mEACRI,MAAO,CACL,CACEroB,EAAG,mCACHsM,EAAG,qCAEL,CACEtM,EAAG,oCACHsM,EAAG,qCAIPwW,MAAM,EACNtH,EAAG,CACD,mEACA,mEACA0O,MAIF,CAAC8E,cAAc,EAAEC,0BAA0B,GAAGC,UAAU,KAAKC,GAAG,CAAC,SAASlvB,EAAQhB,EAAOD,GAC3F,aAEA,IAAIgK,EAAK/I,EAAQ,SACbohB,EAAWphB,EAAQ,kBAEnBsI,EADQ8Y,EAAS1Z,MACFY,OAEf6mB,EAAUnvB,EAAQ,SAClBovB,EAAYpvB,EAAQ,eAExB,SAASqvB,EAAGf,GACV,KAAMhvB,gBAAgB+vB,GACpB,OAAO,IAAIA,EAAGf,GAGO,iBAAZA,IACThmB,EAAO8Y,EAASK,OAAO6N,eAAehB,GAAU,iBAAmBA,GAEnEA,EAAUlN,EAASK,OAAO6M,IAIxBA,aAAmBlN,EAASK,OAAO4M,cACrCC,EAAU,CAAE9M,MAAO8M,IAErBhvB,KAAKkiB,MAAQ8M,EAAQ9M,MAAMA,MAC3BliB,KAAKI,EAAIJ,KAAKkiB,MAAM9hB,EACpBJ,KAAKiwB,GAAKjwB,KAAKI,EAAEga,MAAM,GACvBpa,KAAKic,EAAIjc,KAAKkiB,MAAMjG,EAGpBjc,KAAKic,EAAI+S,EAAQ9M,MAAMjG,EACvBjc,KAAKic,EAAEsK,WAAWyI,EAAQ9M,MAAM9hB,EAAEuO,YAAc,GAGhD3O,KAAK8uB,KAAOE,EAAQF,MAAQE,EAAQ9M,MAAM4M,MAE5CpvB,EAAOD,QAAUswB,GAEd9tB,UAAUiuB,QAAU,SAAiBlB,GACtC,OAAO,IAAIa,EAAQ7vB,KAAMgvB,IAG3Be,EAAG9tB,UAAUkuB,eAAiB,SAAwBC,EAAMtK,GAC1D,OAAO+J,EAAQQ,YAAYrwB,KAAMowB,EAAMtK,IAGzCiK,EAAG9tB,UAAUquB,cAAgB,SAAuBC,EAAKzK,GACvD,OAAO+J,EAAQW,WAAWxwB,KAAMuwB,EAAKzK,IAGvCiK,EAAG9tB,UAAUwuB,WAAa,SAAoBzB,GACvCA,IACHA,EAAU,IAYZ,IATA,IAAI0B,EAAO,IAAI5O,EAASG,SAAS,CAC/B6M,KAAM9uB,KAAK8uB,KACX6B,KAAM3B,EAAQ2B,KACdC,QAAS5B,EAAQ4B,SAAW9O,EAASE,KAAKhiB,KAAK8uB,KAAK+B,cACpDC,MAAO9wB,KAAKI,EAAEoL,YAGZjI,EAAQvD,KAAKI,EAAE6N,aACf8iB,EAAM/wB,KAAKI,EAAEyQ,IAAI,IAAIpH,EAAG,MACzB,CACD,IAAI2mB,EAAO,IAAI3mB,EAAGinB,EAAKM,SAASztB,IAChC,KAAoB,EAAhB6sB,EAAKnlB,IAAI8lB,IAIb,OADAX,EAAKlhB,MAAM,GACJlP,KAAKmwB,eAAeC,KAI/BL,EAAG9tB,UAAUgvB,aAAe,SAAqB/nB,EAAKgoB,GACpD,IAAItU,EAA2B,EAAnB1T,EAAI+E,aAAmBjO,KAAKI,EAAEuO,YAG1C,OAFY,EAARiO,IACF1T,EAAMA,EAAIkR,MAAMwC,KACbsU,GAAgC,GAAnBhoB,EAAI+B,IAAIjL,KAAKI,GACtB8I,EAAI2H,IAAI7Q,KAAKI,GAEb8I,GAGX6mB,EAAG9tB,UAAUkvB,KAAO,SAAcjoB,EAAKhE,EAAK4gB,EAAKkJ,GAC5B,iBAARlJ,IACTkJ,EAAUlJ,EACVA,EAAM,MAEHkJ,IACHA,EAAU,IAEZ9pB,EAAMlF,KAAKmwB,eAAejrB,EAAK4gB,GAC/B5c,EAAMlJ,KAAKixB,aAAa,IAAIxnB,EAAGP,EAAK,KAqBpC,IAlBA,IAAI3F,EAAQvD,KAAKI,EAAE6N,aACfmjB,EAAOlsB,EAAImsB,aAAa7lB,QAAQ,KAAMjI,GAGtCutB,EAAQ5nB,EAAIsC,QAAQ,KAAMjI,GAG1BmtB,EAAO,IAAI5O,EAASG,SAAS,CAC/B6M,KAAM9uB,KAAK8uB,KACX8B,QAASQ,EACTN,MAAOA,EACPH,KAAM3B,EAAQ2B,KACdW,QAAStC,EAAQsC,UAIfC,EAAMvxB,KAAKI,EAAEyQ,IAAI,IAAIpH,EAAG,IAEnB+nB,EAAO,GAASA,IAAQ,CAC/B,IAAItkB,EAAI8hB,EAAQ9hB,EACZ8hB,EAAQ9hB,EAAEskB,GACV,IAAI/nB,EAAGinB,EAAKM,SAAShxB,KAAKI,EAAE6N,eAEhC,MADAf,EAAIlN,KAAKixB,aAAa/jB,GAAG,IACnB2P,KAAK,IAAM,GAAmB,GAAd3P,EAAEjC,IAAIsmB,IAA5B,CAGA,IAAIE,EAAKzxB,KAAKic,EAAErR,IAAIsC,GACpB,IAAIukB,EAAGzG,aAAP,CAGA,IAAI0G,EAAMD,EAAGrL,OACT/lB,EAAIqxB,EAAIpW,KAAKtb,KAAKI,GACtB,GAAkB,IAAdC,EAAEwc,KAAK,GAAX,CAGA,IAAIvc,EAAI4M,EAAE4P,KAAK9c,KAAKI,GAAGwK,IAAIvK,EAAEuK,IAAI1F,EAAImsB,cAAc3gB,KAAKxH,IAExD,GAAkB,KADlB5I,EAAIA,EAAEgb,KAAKtb,KAAKI,IACVyc,KAAK,GAAX,CAGA,IAAI8U,GAAiBF,EAAGpL,OAAO/J,QAAU,EAAI,IACT,IAAfoV,EAAIzmB,IAAI5K,GAAW,EAAI,GAQ5C,OALI2uB,EAAQ4C,WAA8B,EAAjBtxB,EAAE2K,IAAIjL,KAAKiwB,MAClC3vB,EAAIN,KAAKI,EAAEyQ,IAAIvQ,GACfqxB,GAAiB,GAGZ,IAAI7B,EAAU,CAAEzvB,EAAGA,EAAGC,EAAGA,EAAGqxB,cAAeA,UAItD5B,EAAG9tB,UAAU4vB,OAAS,SAAgB3oB,EAAK4oB,EAAW5sB,EAAK4gB,GACzD5c,EAAMlJ,KAAKixB,aAAa,IAAIxnB,EAAGP,EAAK,KACpChE,EAAMlF,KAAKswB,cAAcprB,EAAK4gB,GAI9B,IAAIzlB,GAHJyxB,EAAY,IAAIhC,EAAUgC,EAAW,QAGnBzxB,EACdC,EAAIwxB,EAAUxxB,EAClB,GAAID,EAAEwc,KAAK,GAAK,GAAsB,GAAjBxc,EAAE4K,IAAIjL,KAAKI,GAC9B,OAAO,EACT,GAAIE,EAAEuc,KAAK,GAAK,GAAsB,GAAjBvc,EAAE2K,IAAIjL,KAAKI,GAC9B,OAAO,EAGT,IAeIoX,EAfAua,EAAOzxB,EAAEwc,KAAK9c,KAAKI,GACnB0rB,EAAKiG,EAAKnnB,IAAI1B,GAAKoS,KAAKtb,KAAKI,GAC7B2rB,EAAKgG,EAAKnnB,IAAIvK,GAAGib,KAAKtb,KAAKI,GAE/B,OAAKJ,KAAKkiB,MAAM4B,gBAWZtM,EAAIxX,KAAKic,EAAEqP,QAAQQ,EAAI5mB,EAAI8sB,YAAajG,IACtCf,cAMCxT,EAAEiX,OAAOpuB,KAjBVmX,EAAIxX,KAAKic,EAAEoP,OAAOS,EAAI5mB,EAAI8sB,YAAajG,IACrCf,cAGkC,IAAjCxT,EAAE4O,OAAO9K,KAAKtb,KAAKI,GAAG6K,IAAI5K,IAgBrC0vB,EAAG9tB,UAAUgwB,cAAgB,SAAS/oB,EAAK4oB,EAAWprB,EAAGof,GACvD9c,GAAQ,EAAItC,KAAOA,EAAG,4CACtBorB,EAAY,IAAIhC,EAAUgC,EAAWhM,GAErC,IAAI1lB,EAAIJ,KAAKI,EACTF,EAAI,IAAIuJ,EAAGP,GACX7I,EAAIyxB,EAAUzxB,EACdC,EAAIwxB,EAAUxxB,EAGd4xB,EAAa,EAAJxrB,EACTyrB,EAAczrB,GAAK,EACvB,GAA8C,GAA1CrG,EAAE4K,IAAIjL,KAAKkiB,MAAM1K,EAAE8D,KAAKtb,KAAKkiB,MAAM9hB,KAAY+xB,EACjD,MAAM,IAAIvxB,MAAM,wCAIhBP,EADE8xB,EACEnyB,KAAKkiB,MAAM6D,WAAW1lB,EAAEuQ,IAAI5Q,KAAKkiB,MAAM9hB,GAAI8xB,GAE3ClyB,KAAKkiB,MAAM6D,WAAW1lB,EAAG6xB,GAE/B,IAAIE,EAAON,EAAUzxB,EAAEyc,KAAK1c,GACxB4rB,EAAK5rB,EAAEyQ,IAAI3Q,GAAG0K,IAAIwnB,GAAM9W,KAAKlb,GAC7B6rB,EAAK3rB,EAAEsK,IAAIwnB,GAAM9W,KAAKlb,GAI1B,OAAOJ,KAAKic,EAAEoP,OAAOW,EAAI3rB,EAAG4rB,IAG9B8D,EAAG9tB,UAAUowB,oBAAsB,SAASnyB,EAAG4xB,EAAWQ,EAAGxM,GAE3D,GAAgC,QADhCgM,EAAY,IAAIhC,EAAUgC,EAAWhM,IACvB6L,cACZ,OAAOG,EAAUH,cAEnB,IAAK,IAAIhxB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAI4xB,EACJ,IACEA,EAASvyB,KAAKiyB,cAAc/xB,EAAG4xB,EAAWnxB,GAC1C,MAAOT,GACP,SAGF,GAAIqyB,EAAO7U,GAAG4U,GACZ,OAAO3xB,EAEX,MAAM,IAAIC,MAAM,0CAGhB,CAACimB,iBAAiB,EAAE2L,QAAQ,GAAGC,cAAc,GAAG3L,QAAQ,IAAI4L,GAAG,CAAC,SAAShyB,EAAQhB,EAAOD,GAC1F,aAEA,IAAIgK,EAAK/I,EAAQ,SAGbsI,EAFWtI,EAAQ,kBACF0H,MACFY,OAEnB,SAAS6mB,EAAQzN,EAAI4M,GACnBhvB,KAAKoiB,GAAKA,EACVpiB,KAAKowB,KAAO,KACZpwB,KAAKuwB,IAAM,KAGPvB,EAAQoB,MACVpwB,KAAK2yB,eAAe3D,EAAQoB,KAAMpB,EAAQ4D,SACxC5D,EAAQuB,KACVvwB,KAAK6yB,cAAc7D,EAAQuB,IAAKvB,EAAQ8D,SAE5CpzB,EAAOD,QAAUowB,GAETW,WAAa,SAAoBpO,EAAImO,EAAKzK,GAChD,OAAIyK,aAAeV,EACVU,EAEF,IAAIV,EAAQzN,EAAI,CACrBmO,IAAKA,EACLuC,OAAQhN,KAIZ+J,EAAQQ,YAAc,SAAqBjO,EAAIgO,EAAMtK,GACnD,OAAIsK,aAAgBP,EACXO,EAEF,IAAIP,EAAQzN,EAAI,CACrBgO,KAAMA,EACNwC,QAAS9M,KAIb+J,EAAQ5tB,UAAUiiB,SAAW,WAC3B,IAAIqM,EAAMvwB,KAAKgyB,YAEf,OAAIzB,EAAIvF,aACC,CAAEhoB,QAAQ,EAAO+vB,OAAQ,sBAC7BxC,EAAIrM,WAEJqM,EAAI3lB,IAAI5K,KAAKoiB,GAAGF,MAAM9hB,GAAG4qB,aAGvB,CAAEhoB,QAAQ,EAAM+vB,OAAQ,MAFtB,CAAE/vB,QAAQ,EAAO+vB,OAAQ,uBAFzB,CAAE/vB,QAAQ,EAAO+vB,OAAQ,8BAOpClD,EAAQ5tB,UAAU+vB,UAAY,SAAmB7L,EAASL,GAUxD,MARuB,iBAAZK,IACTL,EAAMK,EACNA,EAAU,MAGPnmB,KAAKuwB,MACRvwB,KAAKuwB,IAAMvwB,KAAKoiB,GAAGnG,EAAErR,IAAI5K,KAAKowB,OAE3BtK,EAGE9lB,KAAKuwB,IAAItK,OAAOH,EAAKK,GAFnBnmB,KAAKuwB,KAKhBV,EAAQ5tB,UAAUovB,WAAa,SAAoBvL,GACjD,MAAY,QAARA,EACK9lB,KAAKowB,KAAKhlB,SAAS,GAAI,GAEvBpL,KAAKowB,MAGhBP,EAAQ5tB,UAAU0wB,eAAiB,SAAwBztB,EAAK4gB,GAC9D9lB,KAAKowB,KAAO,IAAI3mB,EAAGvE,EAAK4gB,GAAO,IAI/B9lB,KAAKowB,KAAOpwB,KAAKowB,KAAK9U,KAAKtb,KAAKoiB,GAAGF,MAAM9hB,IAG3CyvB,EAAQ5tB,UAAU4wB,cAAgB,SAAuB3tB,EAAK4gB,GAC5D,GAAI5gB,EAAIiR,GAAKjR,EAAIkR,EAWf,MAP2B,SAAvBpW,KAAKoiB,GAAGF,MAAMgB,KAChBla,EAAO9D,EAAIiR,EAAG,qBACkB,UAAvBnW,KAAKoiB,GAAGF,MAAMgB,MACS,YAAvBljB,KAAKoiB,GAAGF,MAAMgB,MACvBla,EAAO9D,EAAIiR,GAAKjR,EAAIkR,EAAG,qCAEzBpW,KAAKuwB,IAAMvwB,KAAKoiB,GAAGF,MAAM+B,MAAM/e,EAAIiR,EAAGjR,EAAIkR,IAG5CpW,KAAKuwB,IAAMvwB,KAAKoiB,GAAGF,MAAM2D,YAAY3gB,EAAK4gB,IAI5C+J,EAAQ5tB,UAAU+wB,OAAS,SAAgBzC,GACzC,OAAOA,EAAI3lB,IAAI5K,KAAKowB,MAAMhK,QAI5ByJ,EAAQ5tB,UAAUkvB,KAAO,SAAcjoB,EAAK4c,EAAKkJ,GAC/C,OAAOhvB,KAAKoiB,GAAG+O,KAAKjoB,EAAKlJ,KAAM8lB,EAAKkJ,IAGtCa,EAAQ5tB,UAAU4vB,OAAS,SAAgB3oB,EAAK4oB,GAC9C,OAAO9xB,KAAKoiB,GAAGyP,OAAO3oB,EAAK4oB,EAAW9xB,OAGxC6vB,EAAQ5tB,UAAUwK,QAAU,WAC1B,MAAO,eAAiBzM,KAAKowB,MAAQpwB,KAAKowB,KAAKhlB,SAAS,GAAI,IACrD,UAAYpL,KAAKuwB,KAAOvwB,KAAKuwB,IAAI9jB,WAAa,OAGrD,CAACoa,iBAAiB,EAAEC,QAAQ,IAAImM,GAAG,CAAC,SAASvyB,EAAQhB,EAAOD,GAC9D,aAEA,IAAIgK,EAAK/I,EAAQ,SAGb0H,EADW1H,EAAQ,kBACF0H,MACjBY,EAASZ,EAAMY,OAEnB,SAAS8mB,EAAUd,EAASlJ,GAC1B,GAAIkJ,aAAmBc,EACrB,OAAOd,EAELhvB,KAAKkzB,WAAWlE,EAASlJ,KAG7B9c,EAAOgmB,EAAQ3uB,GAAK2uB,EAAQ1uB,EAAG,4BAC/BN,KAAKK,EAAI,IAAIoJ,EAAGulB,EAAQ3uB,EAAG,IAC3BL,KAAKM,EAAI,IAAImJ,EAAGulB,EAAQ1uB,EAAG,SACGkvB,IAA1BR,EAAQ2C,cACV3xB,KAAK2xB,cAAgB,KAErB3xB,KAAK2xB,cAAgB3C,EAAQ2C,eAIjC,SAASwB,IACPnzB,KAAKozB,MAAQ,EAGf,SAASC,EAAUC,EAAK9b,GACtB,IAAI+b,EAAUD,EAAI9b,EAAE4b,SACpB,KAAgB,IAAVG,GACJ,OAAOA,EAIT,IAFA,IAAIC,EAAqB,GAAVD,EACXtqB,EAAM,EACDtI,EAAI,EAAGgL,EAAM6L,EAAE4b,MAAOzyB,EAAI6yB,EAAU7yB,IAAKgL,IAChD1C,IAAQ,EACRA,GAAOqqB,EAAI3nB,GAGb,OADA6L,EAAE4b,MAAQznB,EACH1C,EAGT,SAASwqB,EAAUH,GAGjB,IAFA,IAAI3yB,EAAI,EACJ6J,EAAM8oB,EAAItyB,OAAS,GACfsyB,EAAI3yB,MAAqB,IAAb2yB,EAAI3yB,EAAI,KAAcA,EAAI6J,GAC5C7J,IAEF,OAAU,IAANA,EACK2yB,EAEFA,EAAIvxB,MAAMpB,GAyCnB,SAAS+yB,EAAgBC,EAAKnpB,GAC5B,GAAIA,EAAM,IACRmpB,EAAIvwB,KAAKoH,OADX,CAIA,IAAIopB,EAAS,GAAKnpB,KAAKopB,IAAIrpB,GAAOC,KAAKqpB,MAAQ,GAE/C,IADAH,EAAIvwB,KAAc,IAATwwB,KACAA,GACPD,EAAIvwB,KAAMoH,KAASopB,GAAU,GAAM,KAErCD,EAAIvwB,KAAKoH,KAjFX9K,EAAOD,QAAUqwB,GAiCP7tB,UAAUixB,WAAa,SAAoBxqB,EAAMod,GACzDpd,EAAON,EAAMoD,QAAQ9C,EAAMod,GAC3B,IAAItO,EAAI,IAAI2b,EACZ,GAAwB,KAApBzqB,EAAK8O,EAAE4b,SACT,OAAO,EAGT,GADUC,EAAU3qB,EAAM8O,GACfA,EAAE4b,QAAW1qB,EAAK1H,OAC3B,OAAO,EAET,GAAwB,IAApB0H,EAAK8O,EAAE4b,SACT,OAAO,EAET,IAAI7S,EAAO8S,EAAU3qB,EAAM8O,GACvBnX,EAAIqI,EAAK3G,MAAMyV,EAAE4b,MAAO7S,EAAO/I,EAAE4b,OAErC,GADA5b,EAAE4b,OAAS7S,EACa,IAApB7X,EAAK8O,EAAE4b,SACT,OAAO,EAET,IAAIW,EAAOV,EAAU3qB,EAAM8O,GAC3B,GAAI9O,EAAK1H,SAAW+yB,EAAOvc,EAAE4b,MAC3B,OAAO,EAET,IAAI9yB,EAAIoI,EAAK3G,MAAMyV,EAAE4b,MAAOW,EAAOvc,EAAE4b,OAYrC,OAXa,IAAT/yB,EAAE,IAAoB,IAAPA,EAAE,KACnBA,EAAIA,EAAE0B,MAAM,IAED,IAATzB,EAAE,IAAoB,IAAPA,EAAE,KACnBA,EAAIA,EAAEyB,MAAM,IAGd/B,KAAKK,EAAI,IAAIoJ,EAAGpJ,GAChBL,KAAKM,EAAI,IAAImJ,EAAGnJ,KAChBN,KAAK2xB,cAAgB,OAkBvB7B,EAAU7tB,UAAU+xB,MAAQ,SAAelO,GACzC,IAAIzlB,EAAIL,KAAKK,EAAEmL,UACXlL,EAAIN,KAAKM,EAAEkL,UAYf,IATW,IAAPnL,EAAE,KACJA,EAAI,CAAE,GAAIimB,OAAOjmB,IAER,IAAPC,EAAE,KACJA,EAAI,CAAE,GAAIgmB,OAAOhmB,IAEnBD,EAAIozB,EAAUpzB,GACdC,EAAImzB,EAAUnzB,KAENA,EAAE,IAAe,IAAPA,EAAE,KAClBA,EAAIA,EAAEyB,MAAM,GAEd,IAAI4xB,EAAM,CAAE,GACZD,EAAgBC,EAAKtzB,EAAEW,SACvB2yB,EAAMA,EAAIrN,OAAOjmB,IACb+C,KAAK,GACTswB,EAAgBC,EAAKrzB,EAAEU,QACvB,IAAIizB,EAAWN,EAAIrN,OAAOhmB,GACtB8N,EAAM,CAAE,IAGZ,OAFAslB,EAAgBtlB,EAAK6lB,EAASjzB,QAC9BoN,EAAMA,EAAIkY,OAAO2N,GACV7rB,EAAM6d,OAAO7X,EAAK0X,KAGzB,CAACe,iBAAiB,EAAEC,QAAQ,IAAIoN,GAAG,CAAC,SAASxzB,EAAQhB,EAAOD,GAC9D+nB,UAAU,GAAG,GAAG,GAAGC,MAAMhoB,EAAQ+nB,YAC/B,CAACE,IAAM,IAAI5jB,GAAG,CAAC,SAASpD,EAAQhB,EAAOD,GACzC,aAEA,IAAIqvB,EAAOpuB,EAAQ,WAEf0H,EADW1H,EAAQ,eACF0H,MACjBY,EAASZ,EAAMY,OAEnB,SAASmrB,EAASnF,GAChB,KAAMhvB,gBAAgBm0B,GACpB,OAAO,IAAIA,EAASnF,GACtBhvB,KAAK8uB,KAAOE,EAAQF,KACpB9uB,KAAKo0B,aAAepF,EAAQoF,WAE5Bp0B,KAAK4gB,OAAS5gB,KAAK8uB,KAAKuF,QACxBr0B,KAAKs0B,WAAatF,EAAQsF,YAAct0B,KAAK8uB,KAAK+B,aAElD7wB,KAAKu0B,OAAS,KACdv0B,KAAKw0B,eAAiB,KACtBx0B,KAAKy0B,EAAI,KACTz0B,KAAK00B,EAAI,KAET,IAAI9D,EAAUxoB,EAAMoD,QAAQwjB,EAAQ4B,QAAS5B,EAAQ2F,YACjD7D,EAAQ1oB,EAAMoD,QAAQwjB,EAAQ8B,MAAO9B,EAAQ4F,UAC7CjE,EAAOvoB,EAAMoD,QAAQwjB,EAAQ2B,KAAM3B,EAAQsC,SAC/CtoB,EAAO4nB,EAAQ5vB,QAAWhB,KAAKs0B,WAAa,EACrC,mCAAqCt0B,KAAKs0B,WAAa,SAC9Dt0B,KAAKiK,MAAM2mB,EAASE,EAAOH,IAE7BjxB,EAAOD,QAAU00B,GAERlyB,UAAUgI,MAAQ,SAAc2mB,EAASE,EAAOH,GACvD,IAAIkE,EAAOjE,EAAQtK,OAAOwK,GAAOxK,OAAOqK,GAExC3wB,KAAKy0B,EAAI,IAAIzyB,MAAMhC,KAAK4gB,OAAS,GACjC5gB,KAAK00B,EAAI,IAAI1yB,MAAMhC,KAAK4gB,OAAS,GACjC,IAAK,IAAIjgB,EAAI,EAAGA,EAAIX,KAAK00B,EAAE1zB,OAAQL,IACjCX,KAAKy0B,EAAE9zB,GAAK,EACZX,KAAK00B,EAAE/zB,GAAK,EAGdX,KAAK80B,QAAQD,GACb70B,KAAKu0B,OAAS,EACdv0B,KAAKw0B,eAAiB,iBAGxBL,EAASlyB,UAAU8yB,MAAQ,WACzB,OAAO,IAAIjG,EAAKkG,KAAKh1B,KAAK8uB,KAAM9uB,KAAKy0B,IAGvCN,EAASlyB,UAAU6yB,QAAU,SAAgBD,GAC3C,IAAII,EAAOj1B,KAAK+0B,QACAG,OAAOl1B,KAAK00B,GACZQ,OAAO,CAAE,IACrBL,IACFI,EAAOA,EAAKC,OAAOL,IACrB70B,KAAKy0B,EAAIQ,EAAKE,SACdn1B,KAAK00B,EAAI10B,KAAK+0B,QAAQG,OAAOl1B,KAAK00B,GAAGS,SAChCN,IAGL70B,KAAKy0B,EAAIz0B,KAAK+0B,QACAG,OAAOl1B,KAAK00B,GACZQ,OAAO,CAAE,IACTA,OAAOL,GACPM,SACdn1B,KAAK00B,EAAI10B,KAAK+0B,QAAQG,OAAOl1B,KAAK00B,GAAGS,WAGvChB,EAASlyB,UAAUsyB,OAAS,SAAgB3D,EAAS+D,EAAY/jB,EAAKwkB,GAE1C,iBAAfT,IACTS,EAASxkB,EACTA,EAAM+jB,EACNA,EAAa,MAGf/D,EAAUxoB,EAAM0F,SAAS8iB,EAAS+D,GAClC/jB,EAAMxI,EAAM0F,SAAS8C,EAAKwkB,GAE1BpsB,EAAO4nB,EAAQ5vB,QAAWhB,KAAKs0B,WAAa,EACrC,mCAAqCt0B,KAAKs0B,WAAa,SAE9Dt0B,KAAK80B,QAAQlE,EAAQtK,OAAO1V,GAAO,KACnC5Q,KAAKu0B,OAAS,GAGhBJ,EAASlyB,UAAU+uB,SAAW,SAAkBxmB,EAAKsb,EAAKlV,EAAKwkB,GAC7D,GAAIp1B,KAAKu0B,OAASv0B,KAAKw0B,eACrB,MAAM,IAAI5zB,MAAM,sBAGC,iBAARklB,IACTsP,EAASxkB,EACTA,EAAMkV,EACNA,EAAM,MAIJlV,IACFA,EAAMxI,EAAMoD,QAAQoF,EAAKwkB,GACzBp1B,KAAK80B,QAAQlkB,IAIf,IADA,IAAIykB,EAAO,GACJA,EAAKr0B,OAASwJ,GACnBxK,KAAK00B,EAAI10B,KAAK+0B,QAAQG,OAAOl1B,KAAK00B,GAAGS,SACrCE,EAAOA,EAAK/O,OAAOtmB,KAAK00B,GAG1B,IAAItmB,EAAMinB,EAAKtzB,MAAM,EAAGyI,GAGxB,OAFAxK,KAAK80B,QAAQlkB,GACb5Q,KAAKu0B,SACEnsB,EAAM6d,OAAO7X,EAAK0X,KAGzB,CAAC2J,cAAc,EAAEE,UAAU,KAAK2F,GAAG,CAAC,SAAS50B,EAAQhB,EAAOD,GAC9DC,EAAOD,aAAU+vB,GACf,IAAI+F,GAAG,CAAC,SAAS70B,EAAQhB,EAAOD,GAClC,aAEA,IAAI2I,EAAQ3I,EACRgK,EAAK/I,EAAQ,SAuCjB,SAAS80B,EAAMxpB,GACb,OAAoB,IAAhBA,EAAKhL,OACA,IAAMgL,EAENA,EAIX,SAASypB,EAAMvsB,GAEb,IADA,IAAIkF,EAAM,GACDzN,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,IAC9ByN,GAAOonB,EAAMtsB,EAAIvI,GAAGyK,SAAS,KAC/B,OAAOgD,EAjDThG,EAAMY,OAAS,SAAgBC,EAAKC,GAClC,IAAKD,EACH,MAAM,IAAIrI,MAAMsI,GAAO,qBAiC3Bd,EAAMoD,QA9BN,SAAiBtC,EAAK4c,GACpB,GAAI9jB,MAAME,QAAQgH,GAChB,OAAOA,EAAInH,QACb,IAAKmH,EACH,MAAO,GACT,IAAIkF,EAAM,GACV,GAAmB,iBAARlF,EAAkB,CAC3B,IAAK,IAAIvI,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,IAC9ByN,EAAIzN,GAAc,EAATuI,EAAIvI,GACf,OAAOyN,EAET,GAAK0X,GAUE,GAAY,QAARA,EAIT,KAHA5c,EAAMA,EAAImC,QAAQ,eAAgB,KAC1BrK,OAAS,GAAM,IACrBkI,EAAM,IAAMA,GACLvI,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,GAAK,EACnCyN,EAAIhL,KAAK/B,SAAS6H,EAAIvI,GAAKuI,EAAIvI,EAAI,GAAI,UAdzC,IAAK,IAAIA,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,IAAK,CACnC,IAAIuC,EAAIgG,EAAI/F,WAAWxC,GACnBiO,EAAK1L,GAAK,EACV8J,EAAS,IAAJ9J,EACL0L,EACFR,EAAIhL,KAAKwL,EAAI5B,GAEboB,EAAIhL,KAAK4J,GASf,OAAOoB,GAUThG,EAAMotB,MAAQA,EAQdptB,EAAMqtB,MAAQA,EAEdrtB,EAAM6d,OAAS,SAAgB0N,EAAK7N,GAClC,MAAY,QAARA,EACK2P,EAAM9B,GAENA,GA+BXvrB,EAAM2a,OA3BN,SAAgBlY,EAAKa,GAInB,IAHA,IAAI4Y,EAAM,GACNjM,EAAK,GAAM3M,EAAI,EACfwB,EAAIrC,EAAIwB,QACQ,GAAba,EAAE2P,KAAK,IAAS,CACrB,IAAIsE,EACJ,GAAIjU,EAAEoP,QAAS,CACb,IAAIvQ,EAAMmB,EAAEoB,MAAM+J,EAAK,GAErB8I,GADS9I,GAAM,GAAK,EAAlBtM,GACGsM,GAAM,GAAKtM,EAEZA,EACNmB,EAAEqN,MAAM4G,QAERA,EAAI,EAENmD,EAAIlhB,KAAK+d,GAIT,IADA,IAAIvG,EAAuB,IAAd1N,EAAE2P,KAAK,IAAgC,IAApB3P,EAAEoB,MAAM+J,EAAK,GAAa3M,EAAI,EAAK,EAC1D/K,EAAI,EAAGA,EAAIia,EAAOja,IACzB2jB,EAAIlhB,KAAK,GACX8J,EAAEqB,OAAOqM,GAGX,OAAO0J,GA2DTlc,EAAM4a,OAtDN,SAAgBkH,EAAIC,GAClB,IAAIzE,EAAM,CACR,GACA,IAGFwE,EAAKA,EAAG7d,QACR8d,EAAKA,EAAG9d,QAGR,IAFA,IAAIqpB,EAAK,EACLC,EAAK,EACa,EAAfzL,EAAGrN,MAAM6Y,IAA0B,EAAfvL,EAAGtN,MAAM8Y,IAAS,CAG3C,IAMI7J,EAYAC,EAIE6J,EAtBFC,EAAO3L,EAAG5b,MAAM,GAAKonB,EAAM,EAC3BI,EAAO3L,EAAG7b,MAAM,GAAKqnB,EAAM,EACnB,IAARE,IACFA,GAAO,GACG,IAARC,IACFA,GAAO,GAGPhK,EADgB,IAAP,EAAN+J,GACE,EAGO,IADRD,EAAM1L,EAAG5b,MAAM,GAAKonB,EAAM,IACN,IAAPE,GAAqB,IAARE,EAGvBD,GAFCA,EAIVnQ,EAAI,GAAGtiB,KAAK0oB,GAIVC,EADgB,IAAP,EAAN+J,GACE,EAGO,IADRF,EAAMzL,EAAG7b,MAAM,GAAKqnB,EAAM,IACN,IAAPC,GAAqB,IAARC,EAGvBC,GAFCA,EAIVpQ,EAAI,GAAGtiB,KAAK2oB,GAGR,EAAI2J,IAAO5J,EAAK,IAClB4J,EAAK,EAAIA,GACP,EAAIC,IAAO5J,EAAK,IAClB4J,EAAK,EAAIA,GACXzL,EAAG3b,OAAO,GACV4b,EAAG5b,OAAO,GAGZ,OAAOmX,GAWTtd,EAAM2tB,eAPN,SAAwBtL,EAAK3oB,EAAMk0B,GACjC,IAAI9wB,EAAM,IAAMpD,EAChB2oB,EAAIxoB,UAAUH,GAAQ,WACpB,YAAqB0tB,IAAdxvB,KAAKkF,GAAqBlF,KAAKkF,GAC/BlF,KAAKkF,GAAO8wB,EAASj1B,KAAKf,QASrCoI,EAAM6tB,WAJN,SAAoB1yB,GAClB,MAAwB,iBAAVA,EAAqB6E,EAAMoD,QAAQjI,EAAO,OACrBA,GAOrC6E,EAAM8tB,UAHN,SAAmB3yB,GACjB,OAAO,IAAIkG,EAAGlG,EAAO,MAAO,QAK5B,CAACujB,QAAQ,IAAIqP,GAAG,CAAC,SAASz1B,EAAQhB,EAAOD,GAC3CC,EAAOD,QAAQ,CAACsiB,QAAU,UACxB,IAAIqU,GAAG,CAAC,SAAS11B,EAAQhB,EAAOD,GAClC,IAAIqvB,EAAOrvB,EAEXqvB,EAAK1mB,MAAQ1H,EAAQ,gBACrBouB,EAAKuH,OAAS31B,EAAQ,iBACtBouB,EAAKwH,IAAM51B,EAAQ,cACnBouB,EAAKyH,OAAS71B,EAAQ,iBACtBouB,EAAKkG,KAAOt0B,EAAQ,eAGpBouB,EAAK0H,KAAO1H,EAAKwH,IAAIE,KACrB1H,EAAKO,OAASP,EAAKwH,IAAIjH,OACvBP,EAAK2H,OAAS3H,EAAKwH,IAAIG,OACvB3H,EAAKQ,OAASR,EAAKwH,IAAIhH,OACvBR,EAAKS,OAAST,EAAKwH,IAAI/G,OACvBT,EAAK4H,UAAY5H,EAAKyH,OAAOG,WAE3B,CAACC,gBAAgB,GAAGC,cAAc,GAAGC,gBAAgB,GAAGC,aAAa,GAAGC,eAAe,KAAKC,GAAG,CAAC,SAASt2B,EAAQhB,EAAOD,GAC1H,aAEA,IAAI2I,EAAQ1H,EAAQ,WAChBsI,EAAStI,EAAQ,uBAErB,SAASu2B,IACPj3B,KAAKk3B,QAAU,KACfl3B,KAAKm3B,aAAe,EACpBn3B,KAAKo3B,UAAYp3B,KAAKwJ,YAAY4tB,UAClCp3B,KAAKq0B,QAAUr0B,KAAKwJ,YAAY6qB,QAChCr0B,KAAK6wB,aAAe7wB,KAAKwJ,YAAYqnB,aACrC7wB,KAAKq3B,UAAYr3B,KAAKwJ,YAAY6tB,UAAY,EAC9Cr3B,KAAK4J,OAAS,MAEd5J,KAAKs3B,QAAUt3B,KAAKo3B,UAAY,EAChCp3B,KAAKu3B,SAAWv3B,KAAKo3B,UAAY,IAEnC33B,EAAQw3B,UAAYA,GAEVh1B,UAAUizB,OAAS,SAAgBhsB,EAAK4c,GAUhD,GARA5c,EAAMd,EAAMoD,QAAQtC,EAAK4c,GACpB9lB,KAAKk3B,QAGRl3B,KAAKk3B,QAAUl3B,KAAKk3B,QAAQ5Q,OAAOpd,GAFnClJ,KAAKk3B,QAAUhuB,EAGjBlJ,KAAKm3B,cAAgBjuB,EAAIlI,OAGrBhB,KAAKk3B,QAAQl2B,QAAUhB,KAAKs3B,QAAS,CAIvC,IAAIj3B,GAHJ6I,EAAMlJ,KAAKk3B,SAGCl2B,OAAShB,KAAKs3B,QAC1Bt3B,KAAKk3B,QAAUhuB,EAAInH,MAAMmH,EAAIlI,OAASX,EAAG6I,EAAIlI,QACjB,IAAxBhB,KAAKk3B,QAAQl2B,SACfhB,KAAKk3B,QAAU,MAEjBhuB,EAAMd,EAAMovB,OAAOtuB,EAAK,EAAGA,EAAIlI,OAASX,EAAGL,KAAK4J,QAChD,IAAK,IAAIjJ,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,GAAKX,KAAKu3B,SACxCv3B,KAAK80B,QAAQ5rB,EAAKvI,EAAGA,EAAIX,KAAKu3B,UAGlC,OAAOv3B,MAGTi3B,EAAUh1B,UAAUkzB,OAAS,SAAgBrP,GAI3C,OAHA9lB,KAAKk1B,OAAOl1B,KAAKy3B,QACjBzuB,EAAwB,OAAjBhJ,KAAKk3B,SAELl3B,KAAK03B,QAAQ5R,IAGtBmR,EAAUh1B,UAAUw1B,KAAO,WACzB,IAAIjtB,EAAMxK,KAAKm3B,aACX5zB,EAAQvD,KAAKs3B,QACbpqB,EAAI3J,GAAUiH,EAAMxK,KAAKq3B,WAAa9zB,EACtC6K,EAAM,IAAIpM,MAAMkL,EAAIlN,KAAKq3B,WAC7BjpB,EAAI,GAAK,IACT,IAAK,IAAIzN,EAAI,EAAGA,EAAIuM,EAAGvM,IACrByN,EAAIzN,GAAK,EAIX,GADA6J,IAAQ,EACY,QAAhBxK,KAAK4J,OAAkB,CACzB,IAAK,IAAIzJ,EAAI,EAAGA,EAAIH,KAAKq3B,UAAWl3B,IAClCiO,EAAIzN,KAAO,EAEbyN,EAAIzN,KAAO,EACXyN,EAAIzN,KAAO,EACXyN,EAAIzN,KAAO,EACXyN,EAAIzN,KAAO,EACXyN,EAAIzN,KAAQ6J,IAAQ,GAAM,IAC1B4D,EAAIzN,KAAQ6J,IAAQ,GAAM,IAC1B4D,EAAIzN,KAAQ6J,IAAQ,EAAK,IACzB4D,EAAIzN,KAAa,IAAN6J,OAWX,IATA4D,EAAIzN,KAAa,IAAN6J,EACX4D,EAAIzN,KAAQ6J,IAAQ,EAAK,IACzB4D,EAAIzN,KAAQ6J,IAAQ,GAAM,IAC1B4D,EAAIzN,KAAQ6J,IAAQ,GAAM,IAC1B4D,EAAIzN,KAAO,EACXyN,EAAIzN,KAAO,EACXyN,EAAIzN,KAAO,EACXyN,EAAIzN,KAAO,EAENR,EAAI,EAAGA,EAAIH,KAAKq3B,UAAWl3B,IAC9BiO,EAAIzN,KAAO,EAGf,OAAOyN,IAGP,CAACupB,UAAU,GAAGC,sBAAsB,KAAKC,GAAG,CAAC,SAASn3B,EAAQhB,EAAOD,GACvE,aAEA,IAAI2I,EAAQ1H,EAAQ,WAChBsI,EAAStI,EAAQ,uBAErB,SAASo3B,EAAKhJ,EAAM5pB,EAAK4gB,GACvB,KAAM9lB,gBAAgB83B,GACpB,OAAO,IAAIA,EAAKhJ,EAAM5pB,EAAK4gB,GAC7B9lB,KAAK+3B,KAAOjJ,EACZ9uB,KAAKo3B,UAAYtI,EAAKsI,UAAY,EAClCp3B,KAAKq0B,QAAUvF,EAAKuF,QAAU,EAC9Br0B,KAAKg4B,MAAQ,KACbh4B,KAAKi4B,MAAQ,KAEbj4B,KAAKiK,MAAM7B,EAAMoD,QAAQtG,EAAK4gB,KAEhCpmB,EAAOD,QAAUq4B,GAEZ71B,UAAUgI,MAAQ,SAAc/E,GAE/BA,EAAIlE,OAAShB,KAAKo3B,YACpBlyB,GAAM,IAAIlF,KAAK+3B,MAAO7C,OAAOhwB,GAAKiwB,UACpCnsB,EAAO9D,EAAIlE,QAAUhB,KAAKo3B,WAG1B,IAAK,IAAIz2B,EAAIuE,EAAIlE,OAAQL,EAAIX,KAAKo3B,UAAWz2B,IAC3CuE,EAAI9B,KAAK,GAEX,IAAKzC,EAAI,EAAGA,EAAIuE,EAAIlE,OAAQL,IAC1BuE,EAAIvE,IAAM,GAIZ,IAHAX,KAAKg4B,OAAQ,IAAIh4B,KAAK+3B,MAAO7C,OAAOhwB,GAG/BvE,EAAI,EAAGA,EAAIuE,EAAIlE,OAAQL,IAC1BuE,EAAIvE,IAAM,IACZX,KAAKi4B,OAAQ,IAAIj4B,KAAK+3B,MAAO7C,OAAOhwB,IAGtC4yB,EAAK71B,UAAUizB,OAAS,SAAgBhsB,EAAK4c,GAE3C,OADA9lB,KAAKg4B,MAAM9C,OAAOhsB,EAAK4c,GAChB9lB,MAGT83B,EAAK71B,UAAUkzB,OAAS,SAAgBrP,GAEtC,OADA9lB,KAAKi4B,MAAM/C,OAAOl1B,KAAKg4B,MAAM7C,UACtBn1B,KAAKi4B,MAAM9C,OAAOrP,KAGzB,CAAC6R,UAAU,GAAGC,sBAAsB,KAAKM,GAAG,CAAC,SAASx3B,EAAQhB,EAAOD,GACvEC,EAAOD,QAAU,CAACi3B,UAAW,OAC3B,IAAI3yB,GAAG,CAAC,SAASrD,EAAQhB,EAAOD,GAClC,aAEAA,EAAQ+2B,KAAO91B,EAAQ,WACvBjB,EAAQg3B,OAAS/1B,EAAQ,aACzBjB,EAAQ4vB,OAAS3uB,EAAQ,aACzBjB,EAAQ6vB,OAAS5uB,EAAQ,aACzBjB,EAAQ8vB,OAAS7uB,EAAQ,cAEvB,CAACy3B,UAAU,GAAGC,YAAY,GAAGC,YAAY,GAAGC,YAAY,GAAGC,YAAY,KAAKC,GAAG,CAAC,SAAS93B,EAAQhB,EAAOD,GAC1G+nB,UAAU,GAAG,GAAG,GAAGC,MAAMhoB,EAAQ+nB,YAC/B,CAACE,IAAM,IAAI+Q,GAAG,CAAC,SAAS/3B,EAAQhB,EAAOD,GACzC+nB,UAAU,GAAG,GAAG,GAAGC,MAAMhoB,EAAQ+nB,YAC/B,CAACE,IAAM,IAAIgR,GAAG,CAAC,SAASh4B,EAAQhB,EAAOD,GACzC,aAEA,IAAI2I,EAAQ1H,EAAQ,YAChB21B,EAAS31B,EAAQ,aACjBi4B,EAAYj4B,EAAQ,YACpBsI,EAAStI,EAAQ,uBAEjBk4B,EAAQxwB,EAAMwwB,MACdC,EAAUzwB,EAAMywB,QAChBC,EAAU1wB,EAAM0wB,QAChBC,EAAOJ,EAAUI,KACjBC,EAAQL,EAAUK,MAClBC,EAASN,EAAUM,OACnBC,EAASP,EAAUO,OACnBC,EAASR,EAAUQ,OACnBC,EAAST,EAAUS,OAEnBnC,EAAYZ,EAAOY,UAEnBoC,EAAW,CACb,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,YAGtC,SAASC,IACP,KAAMt5B,gBAAgBs5B,GACpB,OAAO,IAAIA,EAEbrC,EAAUl2B,KAAKf,MACfA,KAAK6Z,EAAI,CACP,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,YAEtC7Z,KAAKkN,EAAImsB,EACTr5B,KAAKu5B,EAAI,IAAIv3B,MAAM,IAErBoG,EAAMe,SAASmwB,EAAQrC,IACvBv3B,EAAOD,QAAU65B,GAEVlC,UAAY,IACnBkC,EAAOjF,QAAU,IACjBiF,EAAOzI,aAAe,IACtByI,EAAOjC,UAAY,GAEnBiC,EAAOr3B,UAAU6yB,QAAU,SAAiB5rB,EAAKoB,GAG/C,IAFA,IAAIivB,EAAIv5B,KAAKu5B,EAEJ54B,EAAI,EAAGA,EAAI,GAAIA,IACtB44B,EAAE54B,GAAKuI,EAAIoB,EAAQ3J,GACrB,KAAOA,EAAI44B,EAAEv4B,OAAQL,IACnB44B,EAAE54B,GAAKk4B,EAAQO,EAAOG,EAAE54B,EAAI,IAAK44B,EAAE54B,EAAI,GAAIw4B,EAAOI,EAAE54B,EAAI,KAAM44B,EAAE54B,EAAI,KAEtE,IAAIF,EAAIT,KAAK6Z,EAAE,GACX9M,EAAI/M,KAAK6Z,EAAE,GACX3W,EAAIlD,KAAK6Z,EAAE,GACX0T,EAAIvtB,KAAK6Z,EAAE,GACX3Z,EAAIF,KAAK6Z,EAAE,GACXra,EAAIQ,KAAK6Z,EAAE,GACXoC,EAAIjc,KAAK6Z,EAAE,GACXA,EAAI7Z,KAAK6Z,EAAE,GAGf,IADA7Q,EAAOhJ,KAAKkN,EAAElM,SAAWu4B,EAAEv4B,QACtBL,EAAI,EAAGA,EAAI44B,EAAEv4B,OAAQL,IAAK,CAC7B,IAAIyD,EAAK00B,EAAQjf,EAAGqf,EAAOh5B,GAAI64B,EAAK74B,EAAGV,EAAGyc,GAAIjc,KAAKkN,EAAEvM,GAAI44B,EAAE54B,IACvD0D,EAAKu0B,EAAMK,EAAOx4B,GAAIu4B,EAAMv4B,EAAGsM,EAAG7J,IACtC2W,EAAIoC,EACJA,EAAIzc,EACJA,EAAIU,EACJA,EAAI04B,EAAMrL,EAAGnpB,GACbmpB,EAAIrqB,EACJA,EAAI6J,EACJA,EAAItM,EACJA,EAAIm4B,EAAMx0B,EAAIC,GAGhBrE,KAAK6Z,EAAE,GAAK+e,EAAM54B,KAAK6Z,EAAE,GAAIpZ,GAC7BT,KAAK6Z,EAAE,GAAK+e,EAAM54B,KAAK6Z,EAAE,GAAI9M,GAC7B/M,KAAK6Z,EAAE,GAAK+e,EAAM54B,KAAK6Z,EAAE,GAAI3W,GAC7BlD,KAAK6Z,EAAE,GAAK+e,EAAM54B,KAAK6Z,EAAE,GAAI0T,GAC7BvtB,KAAK6Z,EAAE,GAAK+e,EAAM54B,KAAK6Z,EAAE,GAAI3Z,GAC7BF,KAAK6Z,EAAE,GAAK+e,EAAM54B,KAAK6Z,EAAE,GAAIra,GAC7BQ,KAAK6Z,EAAE,GAAK+e,EAAM54B,KAAK6Z,EAAE,GAAIoC,GAC7Bjc,KAAK6Z,EAAE,GAAK+e,EAAM54B,KAAK6Z,EAAE,GAAIA,IAG/Byf,EAAOr3B,UAAUy1B,QAAU,SAAgB5R,GACzC,MAAY,QAARA,EACK1d,EAAMoxB,QAAQx5B,KAAK6Z,EAAG,OAEtBzR,EAAMqxB,QAAQz5B,KAAK6Z,EAAG,SAG/B,CAAC6f,YAAY,GAAGC,WAAW,GAAGC,WAAW,GAAGhC,sBAAsB,KAAKiC,GAAG,CAAC,SAASn5B,EAAQhB,EAAOD,GACrG+nB,UAAU,GAAG,GAAG,GAAGC,MAAMhoB,EAAQ+nB,YAC/B,CAACE,IAAM,IAAIoS,GAAG,CAAC,SAASp5B,EAAQhB,EAAOD,GACzC,aAEA,IAAI2I,EAAQ1H,EAAQ,YAChB21B,EAAS31B,EAAQ,aACjBsI,EAAStI,EAAQ,uBAEjBq5B,EAAY3xB,EAAM2xB,UAClBC,EAAY5xB,EAAM4xB,UAClBC,EAAW7xB,EAAM6xB,SACjBC,EAAW9xB,EAAM8xB,SACjBC,EAAQ/xB,EAAM+xB,MACdC,EAAWhyB,EAAMgyB,SACjBC,EAAWjyB,EAAMiyB,SACjBC,EAAalyB,EAAMkyB,WACnBC,EAAanyB,EAAMmyB,WACnBC,EAAapyB,EAAMoyB,WACnBC,EAAaryB,EAAMqyB,WAEnBxD,EAAYZ,EAAOY,UAEnByD,EAAW,CACb,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,UAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,YAGtC,SAASC,IACP,KAAM36B,gBAAgB26B,GACpB,OAAO,IAAIA,EAEb1D,EAAUl2B,KAAKf,MACfA,KAAK6Z,EAAI,CACP,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,UACZ,UAAY,WACZ,WAAY,WACd7Z,KAAKkN,EAAIwtB,EACT16B,KAAKu5B,EAAI,IAAIv3B,MAAM,KAyIrB,SAAS44B,EAAQC,EAAIC,EAAIC,EAAIC,EAAIC,GAC/B,IAAI56B,EAAKw6B,EAAKE,GAASF,EAAMI,EAG7B,OAFI56B,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS66B,EAAQL,EAAIC,EAAIC,EAAIC,EAAIC,EAAIE,GACnC,IAAI96B,EAAKy6B,EAAKE,GAASF,EAAMK,EAG7B,OAFI96B,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS+6B,EAASP,EAAIC,EAAIC,EAAIC,EAAIC,GAChC,IAAI56B,EAAKw6B,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EAGtC,OAFI56B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASg7B,EAASR,EAAIC,EAAIC,EAAIC,EAAIC,EAAIE,GACpC,IAAI96B,EAAKy6B,EAAKE,EAAOF,EAAKK,EAAOH,EAAKG,EAGtC,OAFI96B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASi7B,EAAUT,EAAIC,GACrB,IAIIz6B,EAJQ05B,EAAUc,EAAIC,EAAI,IAClBf,EAAUe,EAAID,EAAI,GAClBd,EAAUe,EAAID,EAAI,GAK9B,OAFIx6B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASk7B,EAAUV,EAAIC,GACrB,IAIIz6B,EAJQ25B,EAAUa,EAAIC,EAAI,IAClBd,EAAUc,EAAID,EAAI,GAClBb,EAAUc,EAAID,EAAI,GAK9B,OAFIx6B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASm7B,EAAUX,EAAIC,GACrB,IAIIz6B,EAJQ05B,EAAUc,EAAIC,EAAI,IAClBf,EAAUc,EAAIC,EAAI,IAClBf,EAAUe,EAAID,EAAI,GAK9B,OAFIx6B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASo7B,EAAUZ,EAAIC,GACrB,IAIIz6B,EAJQ25B,EAAUa,EAAIC,EAAI,IAClBd,EAAUa,EAAIC,EAAI,IAClBd,EAAUc,EAAID,EAAI,GAK9B,OAFIx6B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASq7B,EAAUb,EAAIC,GACrB,IAIIz6B,EAJQ05B,EAAUc,EAAIC,EAAI,GAClBf,EAAUc,EAAIC,EAAI,GAClBb,EAASY,EAAIC,EAAI,GAK7B,OAFIz6B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASs7B,EAAUd,EAAIC,GACrB,IAIIz6B,EAJQ25B,EAAUa,EAAIC,EAAI,GAClBd,EAAUa,EAAIC,EAAI,GAClBZ,EAASW,EAAIC,EAAI,GAK7B,OAFIz6B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASu7B,EAAUf,EAAIC,GACrB,IAIIz6B,EAJQ05B,EAAUc,EAAIC,EAAI,IAClBf,EAAUe,EAAID,EAAI,IAClBZ,EAASY,EAAIC,EAAI,GAK7B,OAFIz6B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASw7B,EAAUhB,EAAIC,GACrB,IAIIz6B,EAJQ25B,EAAUa,EAAIC,EAAI,IAClBd,EAAUc,EAAID,EAAI,IAClBX,EAASW,EAAIC,EAAI,GAK7B,OAFIz6B,EAAI,IACNA,GAAK,YACAA,EAxPT+H,EAAMe,SAASwxB,EAAQ1D,IACvBv3B,EAAOD,QAAUk7B,GAEVvD,UAAY,KACnBuD,EAAOtG,QAAU,IACjBsG,EAAO9J,aAAe,IACtB8J,EAAOtD,UAAY,IAEnBsD,EAAO14B,UAAU65B,cAAgB,SAAuB5yB,EAAKoB,GAI3D,IAHA,IAAIivB,EAAIv5B,KAAKu5B,EAGJ54B,EAAI,EAAGA,EAAI,GAAIA,IACtB44B,EAAE54B,GAAKuI,EAAIoB,EAAQ3J,GACrB,KAAOA,EAAI44B,EAAEv4B,OAAQL,GAAK,EAAG,CAC3B,IAAIo7B,EAAQH,EAAUrC,EAAE54B,EAAI,GAAI44B,EAAE54B,EAAI,IAClCq7B,EAAQH,EAAUtC,EAAE54B,EAAI,GAAI44B,EAAE54B,EAAI,IAClCs7B,EAAQ1C,EAAE54B,EAAI,IACdu7B,EAAQ3C,EAAE54B,EAAI,IACdw7B,EAAQT,EAAUnC,EAAE54B,EAAI,IAAK44B,EAAE54B,EAAI,KACnCy7B,EAAQT,EAAUpC,EAAE54B,EAAI,IAAK44B,EAAE54B,EAAI,KACnC07B,EAAQ9C,EAAE54B,EAAI,IACd27B,EAAQ/C,EAAE54B,EAAI,IAElB44B,EAAE54B,GAAK25B,EACLyB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,GACT/C,EAAE54B,EAAI,GAAK45B,EACTwB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,KAIb3B,EAAO14B,UAAU6yB,QAAU,SAAiB5rB,EAAKoB,GAC/CtK,KAAK87B,cAAc5yB,EAAKoB,GAExB,IAAIivB,EAAIv5B,KAAKu5B,EAETgD,EAAKv8B,KAAK6Z,EAAE,GACZ2iB,EAAKx8B,KAAK6Z,EAAE,GACZ4iB,EAAKz8B,KAAK6Z,EAAE,GACZ6iB,EAAK18B,KAAK6Z,EAAE,GACZ8iB,EAAK38B,KAAK6Z,EAAE,GACZ+iB,EAAK58B,KAAK6Z,EAAE,GACZgjB,EAAK78B,KAAK6Z,EAAE,GACZijB,EAAK98B,KAAK6Z,EAAE,GACZkjB,EAAK/8B,KAAK6Z,EAAE,GACZmjB,EAAKh9B,KAAK6Z,EAAE,GACZojB,EAAKj9B,KAAK6Z,EAAE,IACZqjB,EAAKl9B,KAAK6Z,EAAE,IACZsjB,EAAKn9B,KAAK6Z,EAAE,IACZujB,EAAKp9B,KAAK6Z,EAAE,IACZwjB,EAAKr9B,KAAK6Z,EAAE,IACZyjB,EAAKt9B,KAAK6Z,EAAE,IAEhB7Q,EAAOhJ,KAAKkN,EAAElM,SAAWu4B,EAAEv4B,QAC3B,IAAK,IAAIL,EAAI,EAAGA,EAAI44B,EAAEv4B,OAAQL,GAAK,EAAG,CACpC,IAAIo7B,EAAQsB,EACRrB,EAAQsB,EACRrB,EAAQT,EAAUuB,EAAIC,GACtBd,EAAQT,EAAUsB,EAAIC,GACtBb,EAAQvB,EAAQmC,EAAIC,EAAIC,EAAIC,EAAIC,GAChCf,EAAQlB,EAAQ6B,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACpCf,EAAQr8B,KAAKkN,EAAEvM,GACf27B,EAAQt8B,KAAKkN,EAAEvM,EAAI,GACnB48B,EAAQhE,EAAE54B,GACV68B,EAAQjE,EAAE54B,EAAI,GAEd88B,EAAQjD,EACVuB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPiB,EAAOC,GACLE,EAAQjD,EACVsB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPiB,EAAOC,GAETzB,EAAQT,EAAUiB,EAAIC,GACtBR,EAAQT,EAAUgB,EAAIC,GACtBP,EAAQb,EAASmB,EAAIC,EAAIC,EAAIC,EAAIC,GACjCT,EAAQb,EAASkB,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAErC,IAAIe,EAAQvD,EAAS2B,EAAOC,EAAOC,EAAOC,GACtC0B,EAAQvD,EAAS0B,EAAOC,EAAOC,EAAOC,GAE1CmB,EAAKF,EACLG,EAAKF,EAELD,EAAKF,EACLG,EAAKF,EAELD,EAAKF,EACLG,EAAKF,EAELD,EAAK3C,EAASyC,EAAIC,EAAIW,EAAOC,GAC7BV,EAAK3C,EAASyC,EAAIA,EAAIW,EAAOC,GAE7Bb,EAAKF,EACLG,EAAKF,EAELD,EAAKF,EACLG,EAAKF,EAELD,EAAKF,EACLG,EAAKF,EAELD,EAAKnC,EAASqD,EAAOC,EAAOC,EAAOC,GACnCpB,EAAKnC,EAASoD,EAAOC,EAAOC,EAAOC,GAGrCzD,EAAMn6B,KAAK6Z,EAAG,EAAG0iB,EAAIC,GACrBrC,EAAMn6B,KAAK6Z,EAAG,EAAG4iB,EAAIC,GACrBvC,EAAMn6B,KAAK6Z,EAAG,EAAG8iB,EAAIC,GACrBzC,EAAMn6B,KAAK6Z,EAAG,EAAGgjB,EAAIC,GACrB3C,EAAMn6B,KAAK6Z,EAAG,EAAGkjB,EAAIC,GACrB7C,EAAMn6B,KAAK6Z,EAAG,GAAIojB,EAAIC,GACtB/C,EAAMn6B,KAAK6Z,EAAG,GAAIsjB,EAAIC,GACtBjD,EAAMn6B,KAAK6Z,EAAG,GAAIwjB,EAAIC,IAGxB3C,EAAO14B,UAAUy1B,QAAU,SAAgB5R,GACzC,MAAY,QAARA,EACK1d,EAAMoxB,QAAQx5B,KAAK6Z,EAAG,OAEtBzR,EAAMqxB,QAAQz5B,KAAK6Z,EAAG,SAuH/B,CAAC6f,YAAY,GAAGC,WAAW,GAAG/B,sBAAsB,KAAKiG,GAAG,CAAC,SAASn9B,EAAQhB,EAAOD,GACvF,aAEA,IACIq+B,EADQp9B,EAAQ,YACDo9B,OAYnB,SAAS/E,EAAK5iB,EAAGC,EAAG+K,GAClB,OAAQhL,EAAIC,GAAQD,EAAKgL,EAI3B,SAAS6X,EAAM7iB,EAAGC,EAAG+K,GACnB,OAAQhL,EAAIC,EAAMD,EAAIgL,EAAM/K,EAAI+K,EAIlC,SAAS4c,EAAI5nB,EAAGC,EAAG+K,GACjB,OAAOhL,EAAIC,EAAI+K,EAbjB1hB,EAAQu+B,KARR,SAAc19B,EAAG6V,EAAGC,EAAG+K,GACrB,OAAU,IAAN7gB,EACKy4B,EAAK5iB,EAAGC,EAAG+K,GACV,IAAN7gB,GAAiB,IAANA,EACNy9B,EAAI5nB,EAAGC,EAAG+K,GACT,IAAN7gB,EACK04B,EAAM7iB,EAAGC,EAAG+K,QADrB,GAQF1hB,EAAQs5B,KAAOA,EAKft5B,EAAQu5B,MAAQA,EAKhBv5B,EAAQs+B,IAAMA,EAKdt+B,EAAQw5B,OAHR,SAAgB9iB,GACd,OAAO2nB,EAAO3nB,EAAG,GAAK2nB,EAAO3nB,EAAG,IAAM2nB,EAAO3nB,EAAG,KAOlD1W,EAAQy5B,OAHR,SAAgB/iB,GACd,OAAO2nB,EAAO3nB,EAAG,GAAK2nB,EAAO3nB,EAAG,IAAM2nB,EAAO3nB,EAAG,KAOlD1W,EAAQ05B,OAHR,SAAgBhjB,GACd,OAAO2nB,EAAO3nB,EAAG,GAAK2nB,EAAO3nB,EAAG,IAAOA,IAAM,GAO/C1W,EAAQ25B,OAHR,SAAgBjjB,GACd,OAAO2nB,EAAO3nB,EAAG,IAAM2nB,EAAO3nB,EAAG,IAAOA,IAAM,KAI9C,CAACwjB,WAAW,KAAKsE,GAAG,CAAC,SAASv9B,EAAQhB,EAAOD,GAC/C,aAEA,IAAIuJ,EAAStI,EAAQ,uBACjByI,EAAWzI,EAAQ,YA4CvB,SAASw9B,EAAMxyB,GAKb,OAJWA,IAAM,GACLA,IAAM,EAAK,MACXA,GAAK,EAAK,UACN,IAAJA,IAAa,MACV,EAgBjB,SAAS8pB,EAAMxpB,GACb,OAAoB,IAAhBA,EAAKhL,OACA,IAAMgL,EAENA,EAIX,SAASmyB,EAAMnyB,GACb,OAAoB,IAAhBA,EAAKhL,OACA,IAAMgL,EACU,IAAhBA,EAAKhL,OACL,KAAOgL,EACS,IAAhBA,EAAKhL,OACL,MAAQgL,EACQ,IAAhBA,EAAKhL,OACL,OAASgL,EACO,IAAhBA,EAAKhL,OACL,QAAUgL,EACM,IAAhBA,EAAKhL,OACL,SAAWgL,EACK,IAAhBA,EAAKhL,OACL,UAAYgL,EAEZA,EAvFXvM,EAAQ0J,SAAWA,EAgCnB1J,EAAQ+L,QA9BR,SAAiBtC,EAAK4c,GACpB,GAAI9jB,MAAME,QAAQgH,GAChB,OAAOA,EAAInH,QACb,IAAKmH,EACH,MAAO,GACT,IAAIkF,EAAM,GACV,GAAmB,iBAARlF,EACT,GAAK4c,GAUE,GAAY,QAARA,EAIT,KAHA5c,EAAMA,EAAImC,QAAQ,eAAgB,KAC1BrK,OAAS,GAAM,IACrBkI,EAAM,IAAMA,GACTvI,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,GAAK,EAC/ByN,EAAIhL,KAAK/B,SAAS6H,EAAIvI,GAAKuI,EAAIvI,EAAI,GAAI,UAdzC,IAAK,IAAIA,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,IAAK,CACnC,IAAIuC,EAAIgG,EAAI/F,WAAWxC,GACnBiO,EAAK1L,GAAK,EACV8J,EAAS,IAAJ9J,EACL0L,EACFR,EAAIhL,KAAKwL,EAAI5B,GAEboB,EAAIhL,KAAK4J,QAUf,IAAKrM,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,IAC1ByN,EAAIzN,GAAc,EAATuI,EAAIvI,GAEjB,OAAOyN,GAUT3O,EAAQg2B,MANR,SAAevsB,GAEb,IADA,IAAIkF,EAAM,GACDzN,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,IAC9ByN,GAAOonB,EAAMtsB,EAAIvI,GAAGyK,SAAS,KAC/B,OAAOgD,GAWT3O,EAAQy+B,MAAQA,EAYhBz+B,EAAQ+5B,QAVR,SAAiBtwB,EAAKU,GAEpB,IADA,IAAIwE,EAAM,GACDzN,EAAI,EAAGA,EAAIuI,EAAIlI,OAAQL,IAAK,CACnC,IAAI+K,EAAIxC,EAAIvI,GACG,WAAXiJ,IACF8B,EAAIwyB,EAAMxyB,IACZ0C,GAAO+vB,EAAMzyB,EAAEN,SAAS,KAE1B,OAAOgD,GAUT3O,EAAQ+1B,MAAQA,EAoBhB/1B,EAAQ0+B,MAAQA,EAgBhB1+B,EAAQ+3B,OAdR,SAAgBtuB,EAAKoB,EAAOC,EAAKX,GAC/B,IAAIY,EAAMD,EAAMD,EAChBtB,EAAOwB,EAAM,GAAM,GAEnB,IADA,IAAI4D,EAAM,IAAIpM,MAAMwI,EAAM,GACjB7J,EAAI,EAAGuM,EAAI5C,EAAO3J,EAAIyN,EAAIpN,OAAQL,IAAKuM,GAAK,EAAG,CACtD,IAAIxB,EAEFA,EADa,QAAX9B,EACGV,EAAIgE,IAAM,GAAOhE,EAAIgE,EAAI,IAAM,GAAOhE,EAAIgE,EAAI,IAAM,EAAKhE,EAAIgE,EAAI,GAEjEhE,EAAIgE,EAAI,IAAM,GAAOhE,EAAIgE,EAAI,IAAM,GAAOhE,EAAIgE,EAAI,IAAM,EAAKhE,EAAIgE,GACxEkB,EAAIzN,GAAK+K,IAAM,EAEjB,OAAO0C,GAsBT3O,EAAQg6B,QAlBR,SAAiBvwB,EAAKU,GAEpB,IADA,IAAIwE,EAAM,IAAIpM,MAAmB,EAAbkH,EAAIlI,QACfL,EAAI,EAAGuM,EAAI,EAAGvM,EAAIuI,EAAIlI,OAAQL,IAAKuM,GAAK,EAAG,CAClD,IAAI+K,EAAI/O,EAAIvI,GACG,QAAXiJ,GACFwE,EAAIlB,GAAK+K,IAAM,GACf7J,EAAIlB,EAAI,GAAM+K,IAAM,GAAM,IAC1B7J,EAAIlB,EAAI,GAAM+K,IAAM,EAAK,IACzB7J,EAAIlB,EAAI,GAAS,IAAJ+K,IAEb7J,EAAIlB,EAAI,GAAK+K,IAAM,GACnB7J,EAAIlB,EAAI,GAAM+K,IAAM,GAAM,IAC1B7J,EAAIlB,EAAI,GAAM+K,IAAM,EAAK,IACzB7J,EAAIlB,GAAS,IAAJ+K,GAGb,OAAO7J,GAOT3O,EAAQq+B,OAHR,SAAgBpyB,EAAGqB,GACjB,OAAQrB,IAAMqB,EAAMrB,GAAM,GAAKqB,GAOjCtN,EAAQ2+B,OAHR,SAAgB1yB,EAAGqB,GACjB,OAAQrB,GAAKqB,EAAMrB,IAAO,GAAKqB,GAOjCtN,EAAQm5B,MAHR,SAAen4B,EAAGsM,GAChB,OAAQtM,EAAIsM,IAAO,GAOrBtN,EAAQ4+B,QAHR,SAAiB59B,EAAGsM,EAAG7J,GACrB,OAAQzC,EAAIsM,EAAI7J,IAAO,GAOzBzD,EAAQo5B,QAHR,SAAiBp4B,EAAGsM,EAAG7J,EAAGqqB,GACxB,OAAQ9sB,EAAIsM,EAAI7J,EAAIqqB,IAAO,GAO7B9tB,EAAQq5B,QAHR,SAAiBr4B,EAAGsM,EAAG7J,EAAGqqB,EAAGrtB,GAC3B,OAAQO,EAAIsM,EAAI7J,EAAIqqB,EAAIrtB,IAAO,GAajCT,EAAQ06B,MATR,SAAe7G,EAAKgL,EAAK/B,EAAIC,GAC3B,IAAIC,EAAKnJ,EAAIgL,GAGTtxB,EAAMwvB,EAFDlJ,EAAIgL,EAAM,KAEI,EACnB1vB,GAAM5B,EAAKwvB,EAAK,EAAI,GAAKD,EAAKE,EAClCnJ,EAAIgL,GAAO1vB,IAAO,EAClB0kB,EAAIgL,EAAM,GAAKtxB,GASjBvN,EAAQ26B,SALR,SAAkBmC,EAAIC,EAAIC,EAAIC,GAG5B,OAFUF,EAAKE,IAAQ,EACRF,EAAK,EAAI,GAAKD,EAAKE,IACpB,GAQhBh9B,EAAQ46B,SAJR,SAAkBkC,EAAIC,EAAIC,EAAIC,GAE5B,OADSF,EAAKE,IACA,GAiBhBj9B,EAAQ66B,WAbR,SAAoBiC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAC9C,IAAI7vB,EAAQ,EACRD,EAAKwvB,EAST,OAPAvvB,IADAD,EAAMA,EAAK0vB,IAAQ,GACLF,EAAK,EAAI,EAEvBvvB,IADAD,EAAMA,EAAK4vB,IAAQ,GACLA,EAAK,EAAI,EAIdL,EAAKE,EAAKE,EAAKE,GAFxB5vB,IADAD,EAAMA,EAAK8vB,IAAQ,GACLA,EAAK,EAAI,KAGT,GAQhBr9B,EAAQ86B,WAJR,SAAoBgC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAE9C,OADSN,EAAKE,EAAKE,EAAKE,IACV,GAmBhBr9B,EAAQ+6B,WAfR,SAAoB+B,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACtD,IAAI/vB,EAAQ,EACRD,EAAKwvB,EAWT,OATAvvB,IADAD,EAAMA,EAAK0vB,IAAQ,GACLF,EAAK,EAAI,EAEvBvvB,IADAD,EAAMA,EAAK4vB,IAAQ,GACLA,EAAK,EAAI,EAEvB3vB,IADAD,EAAMA,EAAK8vB,IAAQ,GACLA,EAAK,EAAI,EAIdP,EAAKE,EAAKE,EAAKE,EAAKE,GAF7B9vB,IADAD,EAAMA,EAAKgwB,IAAQ,GACLA,EAAK,EAAI,KAGT,GAShBv9B,EAAQg7B,WALR,SAAoB8B,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAGtD,OAFSR,EAAKE,EAAKE,EAAKE,EAAKE,IAEf,GAQhBv9B,EAAQs6B,UAJR,SAAmBwC,EAAIC,EAAI3xB,GAEzB,OADS2xB,GAAO,GAAK3xB,EAAS0xB,IAAO1xB,KACxB,GAQfpL,EAAQu6B,UAJR,SAAmBuC,EAAIC,EAAI3xB,GAEzB,OADS0xB,GAAO,GAAK1xB,EAAS2xB,IAAO3xB,KACxB,GAOfpL,EAAQw6B,SAHR,SAAkBsC,EAAIC,EAAI3xB,GACxB,OAAO0xB,IAAO1xB,GAQhBpL,EAAQy6B,SAJR,SAAkBqC,EAAIC,EAAI3xB,GAExB,OADS0xB,GAAO,GAAK1xB,EAAS2xB,IAAO3xB,KACxB,IAIb,CAAC1B,SAAW,GAAGyuB,sBAAsB,KAAK5zB,GAAG,CAAC,SAAStD,EAAQhB,EAAOD,GAC3C,mBAAlB0F,OAAOo5B,OAEhB7+B,EAAOD,QAAU,SAAkB2J,EAAMC,GACvCD,EAAKE,OAASD,EACdD,EAAKnH,UAAYkD,OAAOo5B,OAAOl1B,EAAUpH,UAAW,CAClDuH,YAAa,CACXpI,MAAOgI,EACP+lB,YAAY,EACZqP,UAAU,EACVtP,cAAc,MAMpBxvB,EAAOD,QAAU,SAAkB2J,EAAMC,GACvCD,EAAKE,OAASD,EACd,IAAIE,EAAW,aACfA,EAAStH,UAAYoH,EAAUpH,UAC/BmH,EAAKnH,UAAY,IAAIsH,EACrBH,EAAKnH,UAAUuH,YAAcJ,IAI/B,IAAIq1B,GAAG,CAAC,SAAS/9B,EAAQhB,EAAOD,GAClC+nB,UAAU,GAAG,IAAI,GAAGC,MAAMhoB,EAAQ+nB,YAChC,CAACE,IAAM,KAAKgX,GAAG,CAAC,SAASh+B,EAAQhB,EAAOD,IAC1C,SAAWk/B,EAAQ7+B,IAUnB,WACE,aAEA,IAAIoB,EAAyB,iBAAXrB,OAAsBA,OAAS,IAClCqB,EAAK09B,oBAAyC,iBAAZD,GAAwBA,EAAQE,UAAYF,EAAQE,SAASC,OAE5G59B,EAAOpB,GAmET,IAjEA,IAAIi/B,GAAa79B,EAAK89B,sBAA0C,iBAAXt/B,GAAuBA,EAAOD,QAC/Ew/B,EAAY,mBAAmBze,MAAM,IAIrC0e,EAAQ,CAAC,EAAG,EAAG,GAAI,IACnBC,GAAK,CAAC,EAAG,EAAG,MAAO,EAAG,MAAO,WAAY,WAAY,WAAY,MAAO,EAAG,WACrE,EAAG,WAAY,WAAY,MAAO,WAAY,IAAK,EAAG,IAAK,EAAG,WAAY,EAC1E,WAAY,EAAG,WAAY,EAAG,IAAK,WAAY,MAAO,WAAY,MAClE,WAAY,MAAO,WAAY,IAAK,WAAY,MAAO,EAAG,WAAY,WACtE,WAAY,WAAY,MAAO,WAAY,WAAY,EAAG,WAAY,YAC5EC,EAAO,CAAC,IAAK,IAAK,IAAK,KAEvBC,EAAe,CAAC,MAAO,SAAU,cAAe,SAEhDC,EAAqB,SAAU/lB,EAAMhR,EAASg3B,GAChD,OAAO,SAAUC,GACf,OAAO,IAAIC,EAAOlmB,EAAMhR,EAASgR,GAAM2b,OAAOsK,GAASD,OAIvDG,EAA0B,SAAUnmB,EAAMhR,EAASg3B,GACrD,OAAO,SAAUC,EAASG,GACxB,OAAO,IAAIF,EAAOlmB,EAAMhR,EAASo3B,GAAYzK,OAAOsK,GAASD,OAI7DK,EAAe,SAAUrmB,EAAMhR,GACjC,IAAIs3B,EAASP,EAAmB/lB,EAAMhR,EAAS,OAC/Cs3B,EAAOtB,OAAS,WACd,OAAO,IAAIkB,EAAOlmB,EAAMhR,EAASgR,IAEnCsmB,EAAO3K,OAAS,SAAUsK,GACxB,OAAOK,EAAOtB,SAASrJ,OAAOsK,IAEhC,IAAK,IAAI7+B,EAAI,EAAGA,EAAI0+B,EAAar+B,SAAUL,EAAG,CAC5C,IAAIuiB,EAAOmc,EAAa1+B,GACxBk/B,EAAO3c,GAAQoc,EAAmB/lB,EAAMhR,EAAS2a,GAEnD,OAAO2c,GAkBLC,EAAa,CACf,CAACh+B,KAAM,SAAUyG,QAvDE,CAAC,EAAG,IAAK,MAAO,UAuDOgR,KAAM6lB,EAAMQ,aAAcA,GACpE,CAAC99B,KAAM,OAAQyG,QAvDH,CAAC,EAAG,KAAM,OAAQ,WAuDGgR,KAAM6lB,EAAMQ,aAAcA,GAC3D,CAAC99B,KAAM,QAASyG,QA1DE,CAAC,GAAI,KAAM,QAAS,WA0DEgR,KAhDzB,CAAC,IAAK,KAgDqCqmB,aAlBpC,SAAUrmB,EAAMhR,GACtC,IAAIs3B,EAASH,EAAwBnmB,EAAMhR,EAAS,OACpDs3B,EAAOtB,OAAS,SAAUoB,GACxB,OAAO,IAAIF,EAAOlmB,EAAMhR,EAASo3B,IAEnCE,EAAO3K,OAAS,SAAUsK,EAASG,GACjC,OAAOE,EAAOtB,OAAOoB,GAAYzK,OAAOsK,IAE1C,IAAK,IAAI7+B,EAAI,EAAGA,EAAI0+B,EAAar+B,SAAUL,EAAG,CAC5C,IAAIuiB,EAAOmc,EAAa1+B,GACxBk/B,EAAO3c,GAAQwc,EAAwBnmB,EAAMhR,EAAS2a,GAExD,OAAO2c,KASLE,EAAU,GAAIC,EAAc,GAEvBr/B,EAAI,EAAGA,EAAIm/B,EAAW9+B,SAAUL,EAGvC,IAFA,IAAIs/B,EAAYH,EAAWn/B,GACvB4Y,EAAQ0mB,EAAU1mB,KACb7S,EAAI,EAAGA,EAAI6S,EAAKvY,SAAU0F,EAAG,CACpC,IAAIw5B,EAAaD,EAAUn+B,KAAM,IAAMyX,EAAK7S,GAC5Cs5B,EAAY58B,KAAK88B,GACjBH,EAAQG,GAAcD,EAAUL,aAAarmB,EAAK7S,GAAIu5B,EAAU13B,SAIpE,SAASk3B,EAAOlmB,EAAMhR,EAASo3B,GAC7B3/B,KAAKmgC,OAAS,GACdngC,KAAKM,EAAI,GACTN,KAAKuI,QAAUA,EACfvI,KAAK2/B,WAAaA,EAClB3/B,KAAKogC,OAAQ,EACbpgC,KAAKsG,MAAQ,EACbtG,KAAKsK,MAAQ,EACbtK,KAAKqgC,WAAc,MAAQ9mB,GAAQ,IAAO,EAC1CvZ,KAAKsgC,UAAYtgC,KAAKqgC,YAAc,EACpCrgC,KAAKugC,aAAeZ,GAAc,EAClC3/B,KAAKwgC,YAA2B,GAAbb,IAAoB,EAEvC,IAAK,IAAIh/B,EAAI,EAAGA,EAAI,KAAMA,EACxBX,KAAKM,EAAEK,GAAK,EAIhB8+B,EAAOx9B,UAAUizB,OAAS,SAAUsK,GAClC,IAAIiB,EAA+B,iBAAZjB,EACnBiB,GAAajB,EAAQh2B,cAAgB5H,cACvC49B,EAAU,IAAIr9B,WAAWq9B,IAK3B,IAHA,IACuD7+B,EAAGE,EADtDG,EAASw+B,EAAQx+B,OAAQm/B,EAASngC,KAAKmgC,OAAQG,EAAYtgC,KAAKsgC,UAClED,EAAargC,KAAKqgC,WAAY56B,EAAQ,EAAGnF,EAAIN,KAAKM,EAE7CmF,EAAQzE,GAAQ,CACrB,GAAIhB,KAAKogC,MAGP,IAFApgC,KAAKogC,OAAQ,EACbD,EAAO,GAAKngC,KAAKsG,MACZ3F,EAAI,EAAGA,EAAI0/B,EAAa,IAAK1/B,EAChCw/B,EAAOx/B,GAAK,EAGhB,GAAI8/B,EACF,IAAK9/B,EAAIX,KAAKsK,MAAO7E,EAAQzE,GAAUL,EAAI2/B,IAAa76B,EACtD06B,EAAOx/B,GAAK,IAAM6+B,EAAQ/5B,IAAUy5B,EAAY,EAANv+B,UAG5C,IAAKA,EAAIX,KAAKsK,MAAO7E,EAAQzE,GAAUL,EAAI2/B,IAAa76B,GACtD5E,EAAO2+B,EAAQr8B,WAAWsC,IACf,IACT06B,EAAOx/B,GAAK,IAAME,GAAQq+B,EAAY,EAANv+B,MACvBE,EAAO,KAChBs/B,EAAOx/B,GAAK,KAAO,IAAQE,GAAQ,IAAOq+B,EAAY,EAANv+B,MAEvCE,EAAO,OAAkB,OAARA,EAC1Bs/B,EAAOx/B,GAAK,KAAO,IAAQE,GAAQ,KAAQq+B,EAAY,EAANv+B,MAIjDE,EAAO,QAAoB,KAAPA,IAAiB,GAAqC,KAA9B2+B,EAAQr8B,aAAasC,IACjE06B,EAAOx/B,GAAK,KAAO,IAAQE,GAAQ,KAAQq+B,EAAY,EAANv+B,KACjDw/B,EAAOx/B,GAAK,KAAO,IAASE,GAAQ,GAAM,KAAUq+B,EAAY,EAANv+B,MAL1Dw/B,EAAOx/B,GAAK,KAAO,IAASE,GAAQ,EAAK,KAAUq+B,EAAY,EAANv+B,MAHzDw/B,EAAOx/B,GAAK,KAAO,IAAe,GAAPE,IAAiBq+B,EAAY,EAANv+B,MAexD,GAAS2/B,IADTtgC,KAAK0gC,cAAgB//B,GACD,CAGlB,IAFAX,KAAKsK,MAAQ3J,EAAI2/B,EACjBtgC,KAAKsG,MAAQ65B,EAAOE,GACf1/B,EAAI,EAAGA,EAAI0/B,IAAc1/B,EAC5BL,EAAEK,IAAMw/B,EAAOx/B,GAEjBnB,EAAEc,GACFN,KAAKogC,OAAQ,OAEbpgC,KAAKsK,MAAQ3J,EAGjB,OAAOX,MAGTy/B,EAAOx9B,UAAU0+B,SAAW,WAC1B,IAAIR,EAASngC,KAAKmgC,OAAQx/B,EAAIX,KAAK0gC,cAAeL,EAAargC,KAAKqgC,WAAY//B,EAAIN,KAAKM,EAEzF,GADA6/B,EAAOx/B,GAAK,IAAMX,KAAKuI,QAAY,EAAJ5H,GAC3BX,KAAK0gC,gBAAkB1gC,KAAKsgC,UAE9B,IADAH,EAAO,GAAKA,EAAOE,GACd1/B,EAAI,EAAGA,EAAI0/B,EAAa,IAAK1/B,EAChCw/B,EAAOx/B,GAAK,EAIhB,IADAw/B,EAAOE,EAAa,IAAM,WACrB1/B,EAAI,EAAGA,EAAI0/B,IAAc1/B,EAC5BL,EAAEK,IAAMw/B,EAAOx/B,GAEjBnB,EAAEc,IAGJm/B,EAAOx9B,UAAUmJ,SAAWq0B,EAAOx9B,UAAUoG,IAAM,WACjDrI,KAAK2gC,WAKL,IAHA,IAEcr6B,EAFV+5B,EAAargC,KAAKqgC,WAAY//B,EAAIN,KAAKM,EAAGigC,EAAevgC,KAAKugC,aAC9DC,EAAaxgC,KAAKwgC,WAAY7/B,EAAI,EAAG+F,EAAI,EACzC2B,EAAM,GACH3B,EAAI65B,GAAc,CACvB,IAAK5/B,EAAI,EAAGA,EAAI0/B,GAAc35B,EAAI65B,IAAgB5/B,IAAK+F,EACrDJ,EAAQhG,EAAEK,GACV0H,GAAO42B,EAAW34B,GAAS,EAAK,IAAQ24B,EAAkB,GAAR34B,GAC3C24B,EAAW34B,GAAS,GAAM,IAAQ24B,EAAW34B,GAAS,EAAK,IAC3D24B,EAAW34B,GAAS,GAAM,IAAQ24B,EAAW34B,GAAS,GAAM,IAC5D24B,EAAW34B,GAAS,GAAM,IAAQ24B,EAAW34B,GAAS,GAAM,IAEjEI,EAAI25B,GAAe,IACrB7gC,EAAEc,GACFK,EAAI,GAeR,OAZI6/B,IACFl6B,EAAQhG,EAAEK,GACO,EAAb6/B,IACFn4B,GAAO42B,EAAW34B,GAAS,EAAK,IAAQ24B,EAAkB,GAAR34B,IAEnC,EAAbk6B,IACFn4B,GAAO42B,EAAW34B,GAAS,GAAM,IAAQ24B,EAAW34B,GAAS,EAAK,KAEnD,EAAbk6B,IACFn4B,GAAO42B,EAAW34B,GAAS,GAAM,IAAQ24B,EAAW34B,GAAS,GAAM,MAGhE+B,GA+BTo3B,EAAOx9B,UAAUN,OA5BjB89B,EAAOx9B,UAAU2+B,YAAc,WAC7B5gC,KAAK2gC,WAEL,IAGIh/B,EAHA0+B,EAAargC,KAAKqgC,WAAY//B,EAAIN,KAAKM,EAAGigC,EAAevgC,KAAKugC,aAC9DC,EAAaxgC,KAAKwgC,WAAY7/B,EAAI,EAAG+F,EAAI,EACzCnD,EAAQvD,KAAK2/B,YAAc,EAG7Bh+B,EADE6+B,EACO,IAAI5+B,YAAa2+B,EAAe,GAAM,GAEtC,IAAI3+B,YAAY2B,GAG3B,IADA,IAAIs9B,EAAQ,IAAIC,YAAYn/B,GACrB+E,EAAI65B,GAAc,CACvB,IAAK5/B,EAAI,EAAGA,EAAI0/B,GAAc35B,EAAI65B,IAAgB5/B,IAAK+F,EACrDm6B,EAAMn6B,GAAKpG,EAAEK,GAEX+F,EAAI25B,GAAe,GACrB7gC,EAAEc,GAON,OAJIkgC,IACFK,EAAMlgC,GAAKL,EAAEK,GACbgB,EAASA,EAAOI,MAAM,EAAGwB,IAEpB5B,GAKT89B,EAAOx9B,UAAUkzB,OAASsK,EAAOx9B,UAAU4+B,MAAQ,WACjD7gC,KAAK2gC,WAKL,IAHA,IAEgBI,EAAQz6B,EAFpB+5B,EAAargC,KAAKqgC,WAAY//B,EAAIN,KAAKM,EAAGigC,EAAevgC,KAAKugC,aAC9DC,EAAaxgC,KAAKwgC,WAAY7/B,EAAI,EAAG+F,EAAI,EACzCm6B,EAAQ,GACLn6B,EAAI65B,GAAc,CACvB,IAAK5/B,EAAI,EAAGA,EAAI0/B,GAAc35B,EAAI65B,IAAgB5/B,IAAK+F,EACrDq6B,EAASr6B,GAAK,EACdJ,EAAQhG,EAAEK,GACVkgC,EAAME,GAAkB,IAARz6B,EAChBu6B,EAAME,EAAS,GAAMz6B,GAAS,EAAK,IACnCu6B,EAAME,EAAS,GAAMz6B,GAAS,GAAM,IACpCu6B,EAAME,EAAS,GAAMz6B,GAAS,GAAM,IAElCI,EAAI25B,GAAe,GACrB7gC,EAAEc,GAgBN,OAbIkgC,IACFO,EAASr6B,GAAK,EACdJ,EAAQhG,EAAEK,GACO,EAAb6/B,IACFK,EAAME,GAAkB,IAARz6B,GAED,EAAbk6B,IACFK,EAAME,EAAS,GAAMz6B,GAAS,EAAK,KAEpB,EAAbk6B,IACFK,EAAME,EAAS,GAAMz6B,GAAS,GAAM,MAGjCu6B,GAGT,IAAIrhC,EAAI,SAAUc,GAChB,IAAIuZ,EAAG/Y,EAAGV,EAAG4gC,EAAIpX,EAAIC,EAAIoX,EAAIC,EAAIC,EAAIC,EAAIC,EAAI7T,EAAI8T,EAC7CxuB,EAAIG,EAAIG,EAAIG,EAAIG,EAAIG,EAAIG,EAAIG,EAAIG,EAAIG,EAAI8sB,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAC3EC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAC3EC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAAKC,GAC/E,IAAK1jC,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvB4gC,EAAK1gC,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCspB,EAAKtpB,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtCupB,EAAKvpB,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC2gC,EAAK3gC,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC4gC,EAAK5gC,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC6gC,EAAK7gC,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC8gC,EAAK9gC,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IACtC+gC,EAAK/gC,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAItCuZ,GAHA2T,EAAKltB,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,MAG3BupB,GAAM,EAAMoX,IAAO,IAC9BngC,GAHAwgC,EAAKhhC,EAAE,GAAKA,EAAE,IAAMA,EAAE,IAAMA,EAAE,IAAMA,EAAE,MAG3B2gC,GAAM,EAAMpX,IAAO,IAC9BvpB,EAAE,IAAMuZ,EACRvZ,EAAE,IAAMQ,EACRR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACT+Y,EAAImnB,GAAOE,GAAM,EAAMC,IAAO,IAC9BrgC,EAAI8oB,GAAOuX,GAAM,EAAMD,IAAO,IAC9B5gC,EAAE,IAAMuZ,EACRvZ,EAAE,IAAMQ,EACRR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACT+Y,EAAIgQ,GAAOuX,GAAM,EAAMC,IAAO,IAC9BvgC,EAAImgC,GAAOI,GAAM,EAAMD,IAAO,IAC9B9gC,EAAE,IAAMuZ,EACRvZ,EAAE,IAAMQ,EACRR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACT+Y,EAAIqnB,GAAO1T,GAAM,EAAM8T,IAAO,IAC9BxgC,EAAIqgC,GAAOG,GAAM,EAAM9T,IAAO,IAC9BltB,EAAE,IAAMuZ,EACRvZ,EAAE,IAAMQ,EACRR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACT+Y,EAAIunB,GAAOJ,GAAM,EAAMpX,IAAO,IAC9B9oB,EAAIugC,GAAOzX,GAAM,EAAMoX,IAAO,IAC9B1gC,EAAE,IAAMuZ,EACRvZ,EAAE,IAAMQ,EACRR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EACTR,EAAE,KAAOuZ,EACTvZ,EAAE,KAAOQ,EAETgS,EAAKxS,EAAE,GACP2S,EAAK3S,EAAE,GACPuiC,EAAOviC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCwiC,EAAOxiC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCqhC,EAAOrhC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCshC,EAAOthC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCqjC,GAAOrjC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCsjC,GAAOtjC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCmiC,EAAOniC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCoiC,EAAOpiC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC2hC,EAAO3hC,EAAE,IAAM,EAAMA,EAAE,KAAO,GAC9B4hC,EAAO5hC,EAAE,IAAM,EAAMA,EAAE,KAAO,GAC9B8S,EAAM9S,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCiT,EAAMjT,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCyiC,EAAOziC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC0iC,EAAO1iC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCuhC,EAAOvhC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCwhC,EAAOxhC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCujC,GAAOvjC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCwjC,GAAOxjC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC+iC,GAAO/iC,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/BgjC,GAAOhjC,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/B6hC,EAAO7hC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChC8hC,EAAO9hC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCoT,EAAMpT,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCuT,EAAMvT,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChC2iC,EAAO3iC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjC4iC,EAAO5iC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCyhC,EAAOzhC,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC0hC,EAAO1hC,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCihC,EAAOjhC,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/BkhC,EAAOlhC,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/BijC,GAAOjjC,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCkjC,GAAOljC,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC+hC,EAAO/hC,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCgiC,EAAOhiC,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC0T,EAAM1T,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChC6T,EAAM7T,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChC6iC,EAAO7iC,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjC8iC,EAAO9iC,EAAE,KAAO,GAAOA,EAAE,MAAQ,EACjCqiC,EAAOriC,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/BsiC,EAAOtiC,EAAE,IAAM,GAAOA,EAAE,KAAO,EAC/BmhC,EAAOnhC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCohC,EAAOphC,EAAE,KAAO,GAAOA,EAAE,MAAQ,GACjCmjC,GAAOnjC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCojC,GAAOpjC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCiiC,EAAOjiC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCkiC,EAAOliC,EAAE,KAAO,EAAMA,EAAE,MAAQ,GAChCgU,EAAMhU,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAChCmU,EAAMnU,EAAE,KAAO,GAAOA,EAAE,MAAQ,GAEhCA,EAAE,GAAKwS,GAAOM,EAAKM,EACnBpT,EAAE,GAAK2S,GAAOM,EAAKM,EACnBvT,EAAE,IAAMihC,GAAQE,EAAME,EACtBrhC,EAAE,IAAMkhC,GAAQE,EAAME,EACtBthC,EAAE,IAAM2hC,GAAQE,EAAME,EACtB/hC,EAAE,IAAM4hC,GAAQE,EAAME,EACtBhiC,EAAE,IAAMqiC,GAAQE,EAAME,EACtBziC,EAAE,IAAMsiC,GAAQE,EAAME,EACtB1iC,EAAE,IAAM+iC,IAAQE,GAAME,GACtBnjC,EAAE,IAAMgjC,IAAQE,GAAME,GACtBpjC,EAAE,GAAK8S,GAAOM,EAAKM,EACnB1T,EAAE,GAAKiT,GAAOM,EAAKM,EACnB7T,EAAE,IAAMmhC,GAAQE,EAAME,EACtBvhC,EAAE,IAAMohC,GAAQE,EAAME,EACtBxhC,EAAE,IAAM6hC,GAAQE,EAAME,EACtBjiC,EAAE,IAAM8hC,GAAQE,EAAME,EACtBliC,EAAE,IAAMuiC,GAAQE,EAAME,EACtB3iC,EAAE,IAAMwiC,GAAQE,EAAME,EACtB5iC,EAAE,IAAMijC,IAAQE,GAAME,GACtBrjC,EAAE,IAAMkjC,IAAQE,GAAME,GACtBtjC,EAAE,GAAKoT,GAAOM,EAAKM,EACnBhU,EAAE,GAAKuT,GAAOM,EAAKM,EACnBnU,EAAE,IAAMqhC,GAAQE,EAAME,EACtBzhC,EAAE,IAAMshC,GAAQE,EAAME,EACtB1hC,EAAE,IAAM+hC,GAAQE,EAAME,EACtBniC,EAAE,IAAMgiC,GAAQE,EAAME,EACtBpiC,EAAE,IAAMyiC,GAAQE,EAAME,EACtB7iC,EAAE,IAAM0iC,GAAQE,EAAME,EACtB9iC,EAAE,IAAMmjC,IAAQE,GAAME,GACtBvjC,EAAE,IAAMojC,IAAQE,GAAME,GACtBxjC,EAAE,GAAK0T,GAAOM,EAAKxB,EACnBxS,EAAE,GAAK6T,GAAOM,EAAKxB,EACnB3S,EAAE,IAAMuhC,GAAQE,EAAMR,EACtBjhC,EAAE,IAAMwhC,GAAQE,EAAMR,EACtBlhC,EAAE,IAAMiiC,GAAQE,EAAMR,EACtB3hC,EAAE,IAAMkiC,GAAQE,EAAMR,EACtB5hC,EAAE,IAAM2iC,GAAQE,EAAMR,EACtBriC,EAAE,IAAM4iC,GAAQE,EAAMR,EACtBtiC,EAAE,IAAMqjC,IAAQE,GAAMR,GACtB/iC,EAAE,IAAMsjC,IAAQE,GAAMR,GACtBhjC,EAAE,GAAKgU,GAAOxB,EAAKM,EACnB9S,EAAE,GAAKmU,GAAOxB,EAAKM,EACnBjT,EAAE,IAAMyhC,GAAQR,EAAME,EACtBnhC,EAAE,IAAM0hC,GAAQR,EAAME,EACtBphC,EAAE,IAAMmiC,GAAQR,EAAME,EACtB7hC,EAAE,IAAMoiC,GAAQR,EAAME,EACtB9hC,EAAE,IAAM6iC,GAAQR,EAAME,EACtBviC,EAAE,IAAM8iC,GAAQR,EAAME,EACtBxiC,EAAE,IAAMujC,IAAQR,GAAME,GACtBjjC,EAAE,IAAMwjC,IAAQR,GAAME,GAEtBljC,EAAE,IAAM6+B,GAAG/+B,GACXE,EAAE,IAAM6+B,GAAG/+B,EAAI,IAInB,GAAI2+B,EACFr/B,EAAOD,QAAUsgC,OAEjB,IAASp/B,EAAI,EAAGA,EAAIq/B,EAAYh/B,SAAUL,EACxCO,EAAK8+B,EAAYr/B,IAAMo/B,EAAQC,EAAYr/B,IA9cjD,KAmdGI,KAAKf,KAAKU,EAAQ,YAA8B,oBAAXZ,OAAyBA,OAAyB,oBAATC,KAAuBA,KAAyB,oBAAXF,OAAyBA,OAAS,KACtJ,CAACkkC,SAAW,KAAKC,GAAG,CAAC,SAAStjC,EAAQhB,EAAOD,GAG/C,SAASuJ,EAAOC,EAAKC,GACnB,IAAKD,EACH,MAAM,IAAIrI,MAAMsI,GAAO,qBAJ3BxJ,EAAOD,QAAUuJ,GAOVi7B,MAAQ,SAAqBnjC,EAAGT,EAAG6I,GACxC,GAAIpI,GAAKT,EACP,MAAM,IAAIO,MAAMsI,GAAQ,qBAAuBpI,EAAI,OAAST,KAG9D,IAAI6jC,GAAG,CAAC,SAASxjC,EAAQhB,EAAOD,GAElC,IAOI0kC,EACAC,EARAzF,EAAUj/B,EAAOD,QAAU,GAU/B,SAAS4kC,IACL,MAAM,IAAIzjC,MAAM,mCAEpB,SAAS0jC,IACL,MAAM,IAAI1jC,MAAM,qCAsBpB,SAAS2jC,EAAWC,GAChB,GAAIL,IAAqBM,WAErB,OAAOA,WAAWD,EAAK,GAG3B,IAAKL,IAAqBE,IAAqBF,IAAqBM,WAEhE,OADAN,EAAmBM,WACZA,WAAWD,EAAK,GAE3B,IAEI,OAAOL,EAAiBK,EAAK,GAC/B,MAAMtkC,GACJ,IAEI,OAAOikC,EAAiBpjC,KAAK,KAAMyjC,EAAK,GAC1C,MAAMtkC,GAEJ,OAAOikC,EAAiBpjC,KAAKf,KAAMwkC,EAAK,MAvCnD,WACG,IAEQL,EADsB,mBAAfM,WACYA,WAEAJ,EAEzB,MAAOnkC,GACLikC,EAAmBE,EAEvB,IAEQD,EADwB,mBAAjBM,aACcA,aAEAJ,EAE3B,MAAOpkC,GACLkkC,EAAqBE,GAjB7B,GAwEA,IAEIK,EAFAC,EAAQ,GACRC,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaF,IAGlBE,GAAW,EACPF,EAAa3jC,OACb4jC,EAAQD,EAAare,OAAOse,GAE5BE,GAAc,EAEdF,EAAM5jC,QACNgkC,KAIR,SAASA,IACL,IAAIH,EAAJ,CAGA,IAAII,EAAUV,EAAWQ,GACzBF,GAAW,EAGX,IADA,IAAIr6B,EAAMo6B,EAAM5jC,OACVwJ,GAAK,CAGP,IAFAm6B,EAAeC,EACfA,EAAQ,KACCE,EAAat6B,GACdm6B,GACAA,EAAaG,GAAYI,MAGjCJ,GAAc,EACdt6B,EAAMo6B,EAAM5jC,OAEhB2jC,EAAe,KACfE,GAAW,EAnEf,SAAyBM,GACrB,GAAIf,IAAuBM,aAEvB,OAAOA,aAAaS,GAGxB,IAAKf,IAAuBE,IAAwBF,IAAuBM,aAEvE,OADAN,EAAqBM,aACdA,aAAaS,GAExB,IAEWf,EAAmBe,GAC5B,MAAOjlC,GACL,IAEI,OAAOkkC,EAAmBrjC,KAAK,KAAMokC,GACvC,MAAOjlC,GAGL,OAAOkkC,EAAmBrjC,KAAKf,KAAMmlC,KAgD7CC,CAAgBH,IAiBpB,SAASI,EAAKb,EAAK3D,GACf7gC,KAAKwkC,IAAMA,EACXxkC,KAAK6gC,MAAQA,EAYjB,SAASyE,KA5BT3G,EAAQ4G,SAAW,SAAUf,GACzB,IAAIgB,EAAO,IAAIxjC,MAAMwlB,UAAUxmB,OAAS,GACxC,GAAuB,EAAnBwmB,UAAUxmB,OACV,IAAK,IAAIL,EAAI,EAAGA,EAAI6mB,UAAUxmB,OAAQL,IAClC6kC,EAAK7kC,EAAI,GAAK6mB,UAAU7mB,GAGhCikC,EAAMxhC,KAAK,IAAIiiC,EAAKb,EAAKgB,IACJ,IAAjBZ,EAAM5jC,QAAiB6jC,GACvBN,EAAWS,IASnBK,EAAKpjC,UAAUijC,IAAM,WACjBllC,KAAKwkC,IAAI/c,MAAM,KAAMznB,KAAK6gC,QAE9BlC,EAAQ8G,MAAQ,UAChB9G,EAAQ+G,SAAU,EAClB/G,EAAQgH,IAAM,GACdhH,EAAQiH,KAAO,GACfjH,EAAQ5c,QAAU,GAClB4c,EAAQE,SAAW,GAInBF,EAAQkH,GAAKP,EACb3G,EAAQmH,YAAcR,EACtB3G,EAAQoH,KAAOT,EACf3G,EAAQhzB,IAAM25B,EACd3G,EAAQqH,eAAiBV,EACzB3G,EAAQsH,mBAAqBX,EAC7B3G,EAAQuH,KAAOZ,EACf3G,EAAQwH,gBAAkBb,EAC1B3G,EAAQyH,oBAAsBd,EAE9B3G,EAAQ0H,UAAY,SAAUvkC,GAAQ,MAAO,IAE7C68B,EAAQ2H,QAAU,SAAUxkC,GACxB,MAAM,IAAIlB,MAAM,qCAGpB+9B,EAAQ4H,IAAM,WAAc,MAAO,KACnC5H,EAAQ6H,MAAQ,SAAUC,GACtB,MAAM,IAAI7lC,MAAM,mCAEpB+9B,EAAQ+H,MAAQ,WAAa,OAAO,IAElC,IAAIC,GAAG,CAAC,SAASjmC,EAAQhB,EAAOD,GAClC,cAEA,SAAUyB,GACN,IAAI0lC,EAAY,WAIhB,SAAStN,EAAOrhB,GACZ,IAAIwc,EAAI,CACL,WAAY,WAAY,WAAY,WAAY,UAChD,WAAY,WAAY,WAAY,WAAY,UAChD,UAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,WAAY,UAAY,UAChD,UAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,WAAY,WAAY,WAChD,UAAY,UAAY,UAAY,UAAY,WAChD,WAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,UAAY,UAAY,UAChD,UAAY,UAAY,UAAY,WAAY,WAChD,WAAY,WAAY,WAAY,WAAY,WAChD,WAAY,WAAY,WAAY,YAGnCoS,EAAK,WAAYC,EAAK,WAAY5a,EAAK,WAAYC,EAAK,WACxD4a,EAAK,WAAYC,EAAK,WAAYC,EAAK,UAAYC,EAAK,WACxDx7B,EAAI,IAAI1J,MAAM,IAElB,SAASm+B,EAAO3oB,GAEZ,IADA,IAAI7L,EAAM,EAAGnB,EAAMgN,EAAExW,OACP,IAAPwJ,GAAW,CACd,IAAoEhK,EAAGG,EAAG+F,EAAGmmB,EAAIC,EAA7ErsB,EAAIomC,EAAI95B,EAAI+5B,EAAI5jC,EAAIgpB,EAAIqB,EAAIpB,EAAIjsB,EAAI6mC,EAAIvnC,EAAIwnC,EAAI/qB,EAAIgrB,EAAIptB,EAAIqtB,EAEhE,IAAKvmC,EAAI,EAAGA,EAAI,GAAIA,IAChB+F,EAAIiF,EAAQ,EAAFhL,EACV+K,EAAE/K,IAAc,IAAP6W,EAAE9Q,KAAY,IAAiB,IAAT8Q,EAAE9Q,EAAE,KAAY,IACpC,IAAT8Q,EAAE9Q,EAAE,KAAY,EAAe,IAAT8Q,EAAE9Q,EAAE,GAGhC,IAAK/F,EAAI,GAAIA,EAAI,GAAIA,IAEjBksB,IADArsB,EAAIkL,EAAE/K,EAAE,MACG,GAAOH,GAAG,KAAcA,IAAI,GAAOA,GAAG,IAAaA,IAAI,GAGlEssB,IADAtsB,EAAIkL,EAAE/K,EAAE,OACG,EAAMH,GAAG,KAAaA,IAAI,GAAOA,GAAG,IAAaA,IAAI,EAEhEkL,EAAE/K,IAAQksB,EAAKnhB,EAAE/K,EAAE,GAAM,IAAOmsB,EAAKphB,EAAE/K,EAAE,IAAO,GAAM,EAG1D,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBksB,KAAW3sB,IAAI,EAAMA,GAAG,KAAaA,IAAI,GAAOA,GAAG,KACxCA,IAAI,GAAOA,GAAG,KAAeA,EAAIV,GAAOU,EAAI+b,GAAO,IACtDpC,GAAM4a,EAAE9zB,GAAK+K,EAAE/K,GAAM,GAAM,GAAM,EAEzCmsB,IAASrsB,IAAI,EAAMA,GAAG,KAAaA,IAAI,GAAOA,GAAG,KACxCA,IAAI,GAAOA,GAAG,MAAeA,EAAIsM,EAAMtM,EAAIyC,EAAM6J,EAAI7J,GAAO,EAErE2W,EAAIoC,EACJA,EAAIzc,EACJA,EAAIU,EACJA,EAAKqtB,EAAIV,EAAM,EACfU,EAAIrqB,EACJA,EAAI6J,EACJA,EAAItM,EACJA,EAAKosB,EAAKC,EAAM,EAGpB+Z,EAAMA,EAAKpmC,EAAK,EAChBqmC,EAAMA,EAAK/5B,EAAK,EAChBmf,EAAMA,EAAKhpB,EAAK,EAChBipB,EAAMA,EAAKoB,EAAK,EAChBwZ,EAAMA,EAAK7mC,EAAK,EAChB8mC,EAAMA,EAAKxnC,EAAK,EAChBynC,EAAMA,EAAKhrB,EAAK,EAChBirB,EAAMA,EAAKrtB,EAAK,EAEhBlO,GAAO,GACPnB,GAAO,IAIf21B,EAAOloB,GAEP,IAAItX,EAAGwmC,EAAYlvB,EAAEjX,OAAS,GAC9BomC,EAAYnvB,EAAEjX,OAAS,UAAc,EACrCqmC,EAAWpvB,EAAEjX,QAAU,EACvBsmC,EAAYH,EAAY,GAAM,GAAK,IACnC3vB,EAAIS,EAAElW,MAAMkW,EAAEjX,OAASmmC,EAAWlvB,EAAEjX,QAGpC,IADAwW,EAAEpU,KAAK,KACFzC,EAAIwmC,EAAY,EAAGxmC,EAAI2mC,EAAU3mC,IAAO6W,EAAEpU,KAAK,GAYpD,OAXAoU,EAAEpU,KAAMgkC,IAAW,GAAM,KACzB5vB,EAAEpU,KAAMgkC,IAAW,GAAM,KACzB5vB,EAAEpU,KAAMgkC,IAAW,EAAM,KACzB5vB,EAAEpU,KAAMgkC,IAAW,EAAM,KACzB5vB,EAAEpU,KAAMikC,IAAW,GAAM,KACzB7vB,EAAEpU,KAAMikC,IAAW,GAAM,KACzB7vB,EAAEpU,KAAMikC,IAAW,EAAM,KACzB7vB,EAAEpU,KAAMikC,IAAW,EAAM,KAEzBlH,EAAO3oB,GAEA,CACFqvB,IAAK,GAAM,IAAOA,IAAK,GAAM,IAAOA,IAAK,EAAK,IAAOA,IAAK,EAAK,IAC/DC,IAAK,GAAM,IAAOA,IAAK,GAAM,IAAOA,IAAK,EAAK,IAAOA,IAAK,EAAK,IAC/D5a,IAAK,GAAM,IAAOA,IAAK,GAAM,IAAOA,IAAK,EAAK,IAAOA,IAAK,EAAK,IAC/DC,IAAK,GAAM,IAAOA,IAAK,GAAM,IAAOA,IAAK,EAAK,IAAOA,IAAK,EAAK,IAC/D4a,IAAK,GAAM,IAAOA,IAAK,GAAM,IAAOA,IAAK,EAAK,IAAOA,IAAK,EAAK,IAC/DC,IAAK,GAAM,IAAOA,IAAK,GAAM,IAAOA,IAAK,EAAK,IAAOA,IAAK,EAAK,IAC/DC,IAAK,GAAM,IAAOA,IAAK,GAAM,IAAOA,IAAK,EAAK,IAAOA,IAAK,EAAK,IAC/DC,IAAK,GAAM,IAAOA,IAAK,GAAM,IAAOA,IAAK,EAAK,IAAOA,IAAK,EAAK,KAIxE,SAASK,EAA2BC,EAAUC,EAAMC,GAIhD,IAAI/mC,EAFJ6mC,EAAWA,EAASxmC,QAAU,GAAKwmC,EAAWlO,EAAOkO,GAGrD,IAAIG,EAAW,GAAKF,EAAKzmC,OAAS,EAC9Bg3B,EAAQ,IAAIh2B,MAAM2lC,GAClBC,EAAW,IAAI5lC,MAAM,IACrB6lC,EAAK,GAGT,IAAKlnC,EAAI,EAAGA,EAAI,GAAIA,IAAKq3B,EAAMr3B,GAAK,GACpC,IAAKA,EAAI,EAAGA,EAAI6mC,EAASxmC,OAAQL,IAAKq3B,EAAMr3B,IAAM6mC,EAAS7mC,GAC3D,IAAKA,EAAI,EAAGA,EAAI8mC,EAAKzmC,OAAQL,IAAKq3B,EAAM,GAAGr3B,GAAK8mC,EAAK9mC,GACrD,IAAKA,EAAIgnC,EAAW,EAAGhnC,EAAIgnC,EAAUhnC,IAAKq3B,EAAMr3B,GAAK,EAGrD,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAKinC,EAASjnC,GAAK,GACvC,IAAKA,EAAI,EAAGA,EAAI6mC,EAASxmC,OAAQL,IAAKinC,EAASjnC,IAAM6mC,EAAS7mC,GAG9D,SAASmnC,IACL,IAAK,IAAInnC,EAAIgnC,EAAS,EAAQA,EAAS,GAAdhnC,EAAiBA,IAAK,CAE3C,GADAq3B,EAAMr3B,KACFq3B,EAAMr3B,IAAM,IAAM,OACtBq3B,EAAMr3B,GAAK,GAKnB,KAAgB,IAAT+mC,GACHI,IACAD,EAAKA,EAAGvhB,OAAOgT,EAAOsO,EAASthB,OAAOgT,EAAOtB,MAC7C0P,GAAS,GAOb,OALY,EAARA,IACAI,IACAD,EAAKA,EAAGvhB,OAAOgT,EAAOsO,EAASthB,OAAOgT,EAAOtB,KAASj2B,MAAM,EAAG2lC,KAG5DG,EAKX,SAASE,EAAgBC,EAAIC,EAAI5nC,EAAG8V,EAAG+xB,GACnC,IAAIvnC,EAGJ,IADAwnC,EAAUH,EAAkB,IAAb,EAAI3nC,EAAI,GAAS6nC,EAAI,EAAG,IAClCvnC,EAAI,EAAGA,EAAI,EAAIN,EAAGM,IACnBynC,EAASJ,EAAQ,GAAJrnC,EAAQunC,EAAI,IACzBG,EAAUH,EAAI/xB,GACdgyB,EAAUD,EAAI,EAAGF,EAAIC,EAAU,GAAJtnC,EAAS,IAGxC,IAAKA,EAAI,EAAGA,EAAIN,EAAGM,IACfwnC,EAAUH,EAAIC,EAAU,EAAJtnC,EAAS,GAAIqnC,EAAS,GAAJrnC,EAAS,IAGnD,IAAKA,EAAI,EAAGA,EAAIN,EAAGM,IACfwnC,EAAUH,EAAIC,EAAmB,IAAT,EAAJtnC,EAAQ,GAASqnC,EAAc,IAATrnC,EAAIN,GAAS,IAI/D,SAASioC,EAAE7nC,EAAGsM,GACV,OAAQtM,GAAKsM,EAAMtM,IAAO,GAAKsM,EAGnC,SAASs7B,EAAUvsB,EAAG3F,GAClBgyB,EAAUrsB,EAAG,EAAG3F,EAAG,EAAG,IAEtB,IAAK,IAAIxV,EAAI,EAAO,EAAJA,EAAOA,GAAK,EACxBwV,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAE,IAAK,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAE,IAAMA,EAAG,GAAI,IAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAE,IAAMA,EAAG,GAAI,IAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAE,IAAK,IAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAE,IAAMA,EAAG,GAAI,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAE,IAAK,IAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAE,IAAK,GAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAE,IAAMA,EAAG,GAAI,IAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAE,IAAMA,EAAG,GAAI,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAG,IAAMmyB,EAAEnyB,EAAG,GAAKA,EAAE,IAAK,IAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAG,GAAKA,EAAG,GAAI,IAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAE,IAAMA,EAAE,IAAK,GAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAE,IAAMA,EAAE,IAAK,IAC1BA,EAAE,KAAOmyB,EAAEnyB,EAAE,IAAMA,EAAE,IAAK,IAG9B,IAAKxV,EAAI,EAAGA,EAAI,KAAMA,EAClBmb,EAAEnb,IAAMwV,EAAExV,GAKlB,SAASynC,EAASlkC,EAAGC,EAAI6X,EAAGxR,GACxB,IAAK,IAAI7J,EAAI,EAAGA,EAAI6J,EAAK7J,IACrBqb,EAAErb,IAAMuD,EAAEC,EAAKxD,GAIvB,SAASwnC,EAAUI,EAAKC,EAAQp8B,EAAMq8B,EAASznC,GAC3C,KAAOA,KACHoL,EAAKq8B,KAAaF,EAAIC,KAI9B,SAASE,EAAenoC,GACpB,IAAKA,GAA0B,iBAAdA,EAAQ,OACrB,OAAO,EAEX,IAAK,IAAII,EAAI,EAAGA,EAAIJ,EAAES,OAAQL,IAAK,CAC/B,GAAqB,iBAAVJ,EAAEI,GAAoB,OAAO,EAExC,IAAIiD,EAAIvC,SAASd,EAAEI,IACnB,GAAIiD,GAAKrD,EAAEI,IAAMiD,EAAI,GAAU,KAALA,EACtB,OAAO,EAGf,OAAO,EAGX,SAAS+kC,EAAcvnC,EAAOU,GAC1B,IAAI8mC,EAAWvnC,SAASD,GACxB,GAAIA,GAASwnC,EAAY,MAAM,IAAIhoC,MAAM,WAAakB,GACtD,OAAO8mC,EAKX,SAASC,EAAOrB,EAAUC,EAAMhxB,EAAGpW,EAAGmX,EAAGkwB,EAAOoB,GAE5C,IAAKA,EAAY,MAAM,IAAIloC,MAAM,oBAQjC,GANA6V,EAAIkyB,EAAclyB,EAAG,KACrBpW,EAAIsoC,EAActoC,EAAG,KACrBmX,EAAImxB,EAAcnxB,EAAG,KAErBkwB,EAAQiB,EAAcjB,EAAO,SAEnB,IAANjxB,GAA6B,IAAjBA,EAAKA,EAAI,GAAa,MAAM,IAAI7V,MAAM,wBAEtD,GAAQgmC,EAAY,IAAMvmC,EAAtBoW,EAA2B,MAAM,IAAI7V,MAAM,eAC/C,GAAQgmC,EAAY,IAAMpvB,EAAtBnX,EAA2B,MAAM,IAAIO,MAAM,eAE/C,IAAK8nC,EAAelB,GAChB,MAAM,IAAI5mC,MAAM,uCAGpB,IAAK8nC,EAAejB,GAChB,MAAM,IAAI7mC,MAAM,mCAKpB,IAFA,IAAImM,EAAIw6B,EAA2BC,EAAUC,EAAU,IAAJjwB,EAAUnX,GACzDyb,EAAI,IAAIglB,YAAgB,GAAJtpB,EAASnX,GACxBM,EAAI,EAAGA,EAAImb,EAAE9a,OAAQL,IAAK,CAC/B,IAAI+F,EAAQ,EAAJ/F,EACRmb,EAAEnb,IAAkB,IAAXoM,EAAErG,EAAI,KAAc,IACT,IAAXqG,EAAErG,EAAI,KAAc,IACT,IAAXqG,EAAErG,EAAI,KAAc,GACT,IAAXqG,EAAErG,EAAI,KAAc,EAGjC,IAkBYqiC,EACRC,EAnBAC,EAAK,IAAInI,YAAY,GAAKzgC,GAC1Bq0B,EAAI,IAAIoM,YAAY,GAAKzgC,EAAIoW,GAE7BwxB,EAAK,GAAK5nC,EAGV8V,EAAI,IAAI2qB,YAAY,IACpBoH,EAAK,IAAIpH,YAAY,IAErBoI,EAAW1xB,EAAIf,EAAI,EACnB0yB,EAAY,EACZC,EAAgB,KAGhBC,GAAO,EAGPC,EAAQ,EACRC,EAAK,EAILC,EAAQnoC,SAAS,IAAOhB,GAGxBklC,EAAqC,oBAAnB,aAAkCkE,aAAehF,WAInEiF,EAAkB,WAClB,GAAIL,EACA,OAAOP,EAAS,IAAIloC,MAAM,aAAcuoC,EAAYD,GAGxD,OAAQI,GACJ,KAAK,EAIDnB,EAAUrsB,EAFVktB,EAAU,GAALO,EAAUlpC,EAEE4oC,EAAI,EAAGhB,GAExBqB,EAAQ,EACRP,EAAK,EAIT,KAAK,EAIWS,GADRG,EAAQlzB,EAAIsyB,KACKY,EAAQH,GAC7B,IAAK,IAAI7oC,EAAI,EAAGA,EAAIgpC,EAAOhpC,IACvBwnC,EAAUc,EAAI,EAAGvU,GAAIqU,EAAKpoC,GAAKsnC,EAAIA,GACnCF,EAAgBkB,EAAIhB,EAAI5nC,EAAG8V,EAAG+xB,GASlC,GALAa,GAAMY,EACNR,GAAaQ,GAGTC,EAAYvoC,SAAS,IAAO8nC,EAAYD,MAC1BE,EAAe,CAE7B,GADAC,EAAOP,EAAS,KAAMK,EAAYD,GACtB,MACZE,EAAgBQ,EAGpB,GAAIb,EAAKtyB,EACL,MAGJsyB,EAAK,EACLO,EAAQ,EAIZ,KAAK,EAGD,IAAIK,EAcAC,EAbQJ,GADRG,EAAQlzB,EAAIsyB,KACKY,EAAQH,GAC7B,IAAS7oC,EAAI,EAAGA,EAAIgpC,EAAOhpC,IAAK,CAC5B,IACI+F,EAAIuiC,EADmB,IAAb,EAAI5oC,EAAI,IACAoW,EAAI,EAC1B2xB,EAAS1T,EAAGhuB,EAAIuhC,EAAIgB,EAAIhB,GACxBF,EAAgBkB,EAAIhB,EAAI5nC,EAAG8V,EAAG+xB,GASlC,GALAa,GAAMY,EACNR,GAAaQ,GAGTC,EAAYvoC,SAAS,IAAO8nC,EAAYD,MAC1BE,EAAe,CAE7B,GADAC,EAAOP,EAAS,KAAMK,EAAYD,GACtB,MACZE,EAAgBQ,EAGpB,GAAIb,EAAKtyB,EACL,MAOJ,GAJA0xB,EAAUc,EAAI,EAAGntB,EAAGktB,EAAIf,KAGxBsB,EACS/xB,EAAG,CACR8xB,EAAQ,EACR,MAGJv8B,EAAI,GACJ,IAASpM,EAAI,EAAGA,EAAImb,EAAE9a,OAAQL,IAC1BoM,EAAE3J,KAAM0Y,EAAEnb,IAAO,EAAK,KACtBoM,EAAE3J,KAAM0Y,EAAEnb,IAAO,EAAK,KACtBoM,EAAE3J,KAAM0Y,EAAEnb,IAAM,GAAM,KACtBoM,EAAE3J,KAAM0Y,EAAEnb,IAAM,GAAM,KAG1B,IAAIkpC,EAAatC,EAA2BC,EAAUz6B,EAAG26B,GAGzD,OAAOoB,EAAS,KAAM,EAAKe,GAI/BtE,EAASmE,IAIbA,SAIgB,IAAd,EACPhqC,EAAOD,QAAUopC,EAST3nC,IAGHA,EAAK2nC,SACL3nC,EAAK4oC,QAAU5oC,EAAK2nC,QAGxB3nC,EAAK2nC,OAASA,GA9btB,CAicG7oC,OAED,IAAI+pC,GAAG,CAAC,SAASrpC,EAAQhB,EAAOD,IAClC,SAAWK,GAEX,IAAIkqC,EAEJ,GAAIlqC,EAAOmqC,QAAUA,OAAOC,gBAAiB,CAG3C,IAAIC,EAAS,IAAIhoC,WAAW,IAC5B6nC,EAAM,WAEJ,OADAC,OAAOC,gBAAgBC,GAChBA,GAIX,IAAKH,EAAK,CAKR,IAAKI,EAAQ,IAAIpoC,MAAM,IACvBgoC,EAAM,WACJ,IAAK,IAAW3pC,EAAPM,EAAI,EAAMA,EAAI,GAAIA,IACN,IAAV,EAAJA,KAAiBN,EAAoB,WAAhBoK,KAAK4/B,UAC/BD,EAAMzpC,GAAKN,MAAY,EAAJM,IAAa,GAAK,IAGvC,OAAOypC,GAIX1qC,EAAOD,QAAUuqC,IAGdjpC,KAAKf,KAAuB,oBAAXF,OAAyBA,OAAyB,oBAATC,KAAuBA,KAAyB,oBAAXF,OAAyBA,OAAS,KAClI,IAAIyqC,GAAG,CAAC,SAAS5pC,EAAQhB,EAAOD,GAclC,IALA,IAAI8qC,EAAO7pC,EAAQ,SAGf8pC,EAAa,GACbC,EAAa,GACR9pC,EAAI,EAAGA,EAAI,IAAKA,IACvB6pC,EAAW7pC,IAAMA,EAAI,KAAOyK,SAAS,IAAI/H,OAAO,GAChDonC,EAAWD,EAAW7pC,IAAMA,EAuB9B,SAAS+pC,EAAQpX,EAAKyN,GACpB,IAAIpgC,EAAIogC,GAAU,EAAG4J,EAAMH,EAC3B,OAAQG,EAAIrX,EAAI3yB,MAAQgqC,EAAIrX,EAAI3yB,MACxBgqC,EAAIrX,EAAI3yB,MAAQgqC,EAAIrX,EAAI3yB,MAAQ,IAChCgqC,EAAIrX,EAAI3yB,MAAQgqC,EAAIrX,EAAI3yB,MAAQ,IAChCgqC,EAAIrX,EAAI3yB,MAAQgqC,EAAIrX,EAAI3yB,MAAQ,IAChCgqC,EAAIrX,EAAI3yB,MAAQgqC,EAAIrX,EAAI3yB,MAAQ,IAChCgqC,EAAIrX,EAAI3yB,MAAQgqC,EAAIrX,EAAI3yB,MACxBgqC,EAAIrX,EAAI3yB,MAAQgqC,EAAIrX,EAAI3yB,MACxBgqC,EAAIrX,EAAI3yB,MAAQgqC,EAAIrX,EAAI3yB,MASlC,IAAIiqC,EAAaL,IAGbM,EAAU,CACI,EAAhBD,EAAW,GACXA,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,IAIrEE,EAAmD,OAAtCF,EAAW,IAAM,EAAIA,EAAW,IAG7CG,EAAa,EAAGC,EAAa,EAiFjC,SAASC,EAAGjc,EAASsE,EAAKyN,GAExB,IAAIpgC,EAAI2yB,GAAOyN,GAAU,EAEF,iBAAb,IACRzN,EAAiB,UAAXtE,EAAsB,IAAIhtB,MAAM,IAAM,KAC5CgtB,EAAU,MAIZ,IAAIkc,GAFJlc,EAAUA,GAAW,IAEFqb,SAAWrb,EAAQgb,KAAOO,KAO7C,GAJAW,EAAK,GAAgB,GAAVA,EAAK,GAAa,GAC7BA,EAAK,GAAgB,GAAVA,EAAK,GAAa,IAGzB5X,EACF,IAAK,IAAI6X,EAAK,EAAGA,EAAK,GAAIA,IACxB7X,EAAI3yB,EAAIwqC,GAAMD,EAAKC,GAIvB,OAAO7X,GAAOoX,EAAQQ,GAIxB,IAAIE,EAAOH,EACXG,EAAK1hB,GA1GL,SAAYsF,EAASsE,EAAKyN,GACxB,IAAIpgC,EAAI2yB,GAAOyN,GAAU,EACrBh0B,EAAIumB,GAAO,GAIX+X,OAAgC7b,KAFpCR,EAAUA,GAAW,IAEEqc,SAAyBrc,EAAQqc,SAAWP,EAM/DQ,OAA0B9b,IAAlBR,EAAQsc,MAAsBtc,EAAQsc,OAAQ,IAAIC,MAAOC,UAIjEC,OAA0Bjc,IAAlBR,EAAQyc,MAAsBzc,EAAQyc,MAAQT,EAAa,EAGnEU,EAAMJ,EAAQP,GAAeU,EAAQT,GAAY,IAcrD,GAXIU,EAAK,QAA0Blc,IAArBR,EAAQqc,WACpBA,EAAWA,EAAW,EAAI,QAKvBK,EAAK,GAAaX,EAARO,SAAyC9b,IAAlBR,EAAQyc,QAC5CA,EAAQ,GAIG,KAATA,EACF,MAAM,IAAI7qC,MAAM,mDAGlBmqC,EAAaO,EAEbR,EAAYO,EAMZ,IAAIM,GAA4B,KAAb,WAHnBL,GAAS,eAJTN,EAAaS,IAOoC,WACjD1+B,EAAEpM,KAAOgrC,IAAO,GAAK,IACrB5+B,EAAEpM,KAAOgrC,IAAO,GAAK,IACrB5+B,EAAEpM,KAAOgrC,IAAO,EAAI,IACpB5+B,EAAEpM,KAAY,IAALgrC,EAGT,IAAIC,EAAON,EAAQ,WAAc,IAAS,UAC1Cv+B,EAAEpM,KAAOirC,IAAQ,EAAI,IACrB7+B,EAAEpM,KAAa,IAANirC,EAGT7+B,EAAEpM,KAAOirC,IAAQ,GAAK,GAAM,GAC5B7+B,EAAEpM,KAAOirC,IAAQ,GAAK,IAGtB7+B,EAAEpM,KAAO0qC,IAAa,EAAI,IAG1Bt+B,EAAEpM,KAAkB,IAAX0qC,EAIT,IADA,IAAIvM,EAAO9P,EAAQ8P,MAAQ+L,EAClBzqC,EAAI,EAAGA,EAAI,EAAGA,IACrB2M,EAAEpM,EAAIP,GAAK0+B,EAAK1+B,GAGlB,OAAOkzB,GAAYoX,EAAQ39B,IAmC7Bq+B,EAAKH,GAAKA,EACVG,EAAKtgB,MAhKL,SAAexqB,EAAGgzB,EAAKyN,GACrB,IAAIpgC,EAAK2yB,GAAOyN,GAAW,EAAGoK,EAAK,EAUnC,IARA7X,EAAMA,GAAO,GACbhzB,EAAEurC,cAAcxgC,QAAQ,eAAgB,SAASygC,GAC3CX,EAAK,KACP7X,EAAI3yB,EAAIwqC,KAAQV,EAAWqB,MAKxBX,EAAK,IACV7X,EAAI3yB,EAAIwqC,KAAQ,EAGlB,OAAO7X,GAkJT8X,EAAKV,QAAUA,EAEfhrC,EAAOD,QAAU2rC,GAEf,CAACW,QAAQ,KAAKC,GAAG,CAAC,SAAStrC,EAAQhB,EAAOD,GAC5C,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI6qC,EAAYvrC,EAAQ,2BACxBhB,EAAOD,QAAU,CACbysC,OAAQ,SAAUC,GACdA,EAAWC,KAAKD,GAEhB,IADA,IAAIzjC,EAAO,GACF/H,EAAI,EAAGA,EAAIwrC,EAASnrC,OAAQL,IACjC+H,EAAKtF,KAAK+oC,EAAShpC,WAAWxC,IAElC,OAAOsrC,EAAUI,SAAS3jC,IAE9Bud,OAAQ,SAAUvd,GACdA,EAAOujC,EAAUI,SAAS3jC,GAE1B,IADA,IAAIyjC,EAAW,GACNxrC,EAAI,EAAGA,EAAI+H,EAAK1H,OAAQL,IAC7BwrC,GAAY3oC,OAAOC,aAAaiF,EAAK/H,IAEzC,OAAO2rC,KAAKH,MAIlB,CAACI,0BAA0B,KAAKC,GAAG,CAAC,SAAS9rC,EAAQhB,EAAOD,GAC9D,aACA,IACIC,EAAOD,QAAQgtC,eAAiBA,eAEpC,MAAOC,GACHC,QAAQ9Y,IAAI,0CACZn0B,EAAOD,QAAQgtC,eAAiB,OAGlC,IAAIG,GAAG,CAAC,SAASlsC,EAAQhB,EAAOD,GAClC,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI2rC,EAAcrsC,EAAQ,eACtBssC,EAAYtsC,EAAQ,oBACpBusC,EAAcvsC,EAAQ,sBACtBwsC,EAAexsC,EAAQ,uBACvBysC,EAASN,EAAansC,EAAQ,oBAC9B0sC,EAAyB,CACzB1kC,MAAM,EAAM2kC,MAAM,EAAMC,UAAU,EAAMC,UAAU,EAAMzc,OAAO,EAAM0c,IAAI,EAAMpsC,OAAO,GAiC1F,SAASqsC,EAAUC,EAAUC,EAAcC,GACvC,IAAI/N,EAAS6N,EAASG,UAAUC,UAAUH,GAC1C,OAAO,WAEH,IADA,IAAII,EAAS,GACJC,EAAK,EAAGA,EAAKxmB,UAAUxmB,OAAQgtC,IACpCD,EAAOC,GAAMxmB,UAAUwmB,GAE3B,IAAIC,EAAc,GAElB,GAAIF,EAAO/sC,SAAW6+B,EAAOqO,OAAOltC,OAAS,GAA4C,iBAA/B+sC,EAAOA,EAAO/sC,OAAS,GAG7E,IAAK,IAAIkE,KAFT+oC,EAzCZ,SAAoBE,GAChB,IAAInrC,EAAS,GACb,IAAK,IAAIkC,KAAOipC,EACZnrC,EAAOkC,GAAOipC,EAAOjpC,GAEzB,OAAOlC,EAoCeorC,CAAWL,EAAOM,OAG5B,IAAKjB,EAAuBloC,GACxB,MAAM,IAAItE,MAAM,gCAAkCsE,GAI9D,GAAI6oC,EAAO/sC,QAAU6+B,EAAOqO,OAAOltC,OAC/B,MAAM,IAAIJ,MAAM,iCAUpB,MAPA,CAAC,OAAQ,MAAM0tC,QAAQ,SAAUppC,GAC7B,GAAwB,MAApB+oC,EAAY/oC,GACZ,MAAM,IAAItE,MAAM,mBAAqBsE,KAI7C+oC,EAAYT,GAAKE,EAASa,eAnDlC,SAASC,EAAiBC,EAAUrtC,EAAOstC,GACvC,GAAI1sC,MAAME,QAAQwsC,GAAY,CAC1B,IAAIC,EAAW,GAWf,OAVAD,EAAUJ,QAAQ,SAAUI,EAAWjpC,GACnC,IAAI7B,EAAI,KAEJA,EADA5B,MAAME,QAAQd,GACVA,EAAMqE,GAGNrE,EAAMstC,EAAU5sC,MAExB6sC,EAASvrC,KAAKorC,EAAiBC,EAAU7qC,EAAG8qC,MAEzCE,QAAQC,IAAIF,GAEvB,MAAuB,YAAnBD,EAAUxrB,KACHurB,EAASK,YAAY1tC,GAE5BstC,EAAUK,WACHP,EAAiBC,EAAUrtC,EAAOstC,EAAUK,YAEhDH,QAAQI,QAAQ5tC,GA+BZotC,CAAiBd,EAASe,SAAUV,EAAQlO,EAAOqO,QAAQe,KAAK,SAAUlB,GAE7E,GADAE,EAAYvlC,KAAOm3B,EAAO5Z,OAAO8nB,GACb,SAAhBlO,EAAO3c,KAEP,OAAI0qB,EACOgB,QAAQI,QAAQ/B,EAAYiC,eAGvC,CAAC,WAAY,WAAY,SAASZ,QAAQ,SAAUppC,GAChD,GAAwB,MAApB+oC,EAAY/oC,GACZ,MAAM,IAAItE,MAAM,wBAA0BsE,KAG1B,MAApB+oC,EAAYZ,MAAgBK,EAASyB,SACjCzB,EAASyB,OAAOC,QAChBnB,EAAYZ,KAAOK,EAASyB,OAAOC,QAE9B1B,EAASyB,OAAOE,aACrBpB,EAAYZ,KAAOK,EAASyB,OAAOE,eAGpCnC,EAAaoC,kBAAkBrB,GAAagB,KAAK,SAAUhB,GAC9D,OAAOP,EAASe,SAAS1tC,KAAKktC,GAAagB,KAAK,SAAU7tC,GACtD,IACI,IAAI4B,EAAS68B,EAAOqM,OAAO9qC,GAI3B,OAH8B,IAA1By+B,EAAO0P,QAAQvuC,SACfgC,EAASA,EAAO,IAEbA,EAEX,MAAO0pC,GAQH,KAPc,OAAVtrC,GAA0C,EAAxBy+B,EAAO0P,QAAQvuC,QACjCmsC,EAAOqC,WAAW,iBAAkBrC,EAAOsC,eAAgB,CACvDL,QAAS1B,EAAS0B,QAClBvP,OAAQA,EAAO/N,UACf1wB,MAAO2sC,IAGTrB,QAKjB,GAAoB,gBAAhB7M,EAAO3c,KAAwB,CACpC,IAAKwqB,EAASyB,OACV,OAAOP,QAAQc,OAAO,IAAI9uC,MAAM,mBAGpC,GAAwB,MAApBqtC,EAAYZ,KACZ,MAAM,IAAIzsC,MAAM,oCAGpB,GAAIgtC,EACA,OAAIF,EAASyB,OAAOQ,YACTjC,EAASyB,OAAOQ,YAAY1B,IAEnCP,EAASyB,OAAOC,QAChBnB,EAAYZ,KAAOK,EAASyB,OAAOC,QAE9B1B,EAASyB,OAAOE,aACrBpB,EAAYZ,KAAOK,EAASyB,OAAOE,cAEhCnC,EAAaoC,kBAAkBrB,GAAagB,KAAK,SAAUhB,GAC9D,OAAOP,EAASe,SAASkB,YAAY1B,MAI7C,GAAIP,EAASyB,OAAOS,gBAChB,OAAOlC,EAASyB,OAAOS,gBAAgB3B,GAE3C,IAAKP,EAASyB,OAAOhe,KACjB,OAAOyd,QAAQc,OAAO,IAAI9uC,MAAM,2CAepC,GAb2B,MAAvBqtC,EAAY4B,UACZ5B,EAAY4B,QAAUnC,EAASe,SAASqB,aAAab,KAAK,SAAUc,GAChE,OAAOA,EAAQF,WAGK,MAAxB5B,EAAYX,WACRI,EAASyB,OAAOa,gBAChB/B,EAAYX,SAAWI,EAASyB,OAAOa,gBAGvC/B,EAAYX,SAAW,MAG1BW,EAAYnd,MACb,GAAI4c,EAASyB,OAAOc,oBAChBhC,EAAYnd,MAAQ4c,EAASyB,OAAOc,2BAEnC,GAAIvC,EAASyB,OAAOC,QACrBnB,EAAYnd,MAAQ4c,EAASe,SAASwB,oBAAoBvC,EAASyB,OAAOC,aAEzE,CAAA,IAAI1B,EAASyB,OAAOE,WAIrB,MAAM,IAAIzuC,MAAM,0BAHhBqtC,EAAYnd,MAAQ4c,EAASe,SAASwB,oBAAoBvC,EAASyB,OAAOE,cAclF,OARKpB,EAAYV,WACTG,EAASyB,OAAOe,gBAChBjC,EAAYV,SAAWG,EAASyB,OAAOe,gBAGvCjC,EAAYV,SAAWG,EAASe,SAAS0B,eAG1CjD,EAAaoC,kBAAkBrB,GAAagB,KAAK,SAAUhB,GAC9D,IAAImC,EAAoB1C,EAASyB,OAAOhe,KAAK8c,GAC7C,OAAOP,EAASe,SAASmB,gBAAgBQ,KAGjD,MAAM,IAAIxvC,MAAM,kBAAoBi/B,EAAO3c,SASvD,IAAImtB,EAA0B,WAG1B,SAASA,EAASC,EAAeC,EAAmBC,GAChD,IAPUpvC,EAONqvC,EAAQzwC,KAUZ,GATAmtC,EAAOuD,SAAS1wC,KAAMqwC,GAGlBE,aAA6BxD,EAAY4D,UACzCzD,EAAa0D,eAAe5wC,KAAM,YAAauwC,GAG/CrD,EAAa0D,eAAe5wC,KAAM,YAAa,IAAI+sC,EAAY4D,UAAUJ,KAExEC,EACD,MAAM,IAAI5vC,MAAM,8BAcpB,IAhCUQ,EAoBGovC,IAnBkB,MAAlBpvC,EAAMqtC,UAoBfvB,EAAa0D,eAAe5wC,KAAM,WAAYwwC,EAAiB/B,UAC/DvB,EAAa0D,eAAe5wC,KAAM,SAAUwwC,KAG5CtD,EAAa0D,eAAe5wC,KAAM,WAAYwwC,GAC9CtD,EAAa0D,eAAe5wC,KAAM,SAAU,OAEhDktC,EAAa0D,eAAe5wC,KAAM,WAAY,IAC9CktC,EAAa0D,eAAe5wC,KAAM,SAAU,IAC5CktC,EAAa0D,eAAe5wC,KAAM,YAAa,KAE1CswC,EAGD,OAFApD,EAAa0D,eAAe5wC,KAAM,UAAW,WAC7CktC,EAAa0D,eAAe5wC,KAAM,iBAAkB4uC,QAAQI,QAAQ,OAGxE9B,EAAa0D,eAAe5wC,KAAM,UAAWswC,GAAiB,MAC9DpD,EAAa0D,eAAe5wC,KAAM,iBAAkBA,KAAKyuC,SAASK,YAAYwB,GAAiB,OAC/FnrC,OAAO0rC,KAAK7wC,KAAK6tC,UAAUC,WAAWQ,QAAQ,SAAUxsC,GACpD,IAAIojC,EAAMuI,EAAUgD,EAAO3uC,GAAM,GACd,MAAf2uC,EAAM3uC,GACNorC,EAAa0D,eAAeH,EAAO3uC,EAAMojC,GAGzCyH,QAAQ9Y,IAAI,qCAAuC/xB,GAE1B,MAAzB2uC,EAAM3C,UAAUhsC,KAChBorC,EAAa0D,eAAeH,EAAM3C,UAAWhsC,EAAMojC,GACnDgI,EAAa0D,eAAeH,EAAMK,SAAUhvC,EAAM2rC,EAAUgD,EAAO3uC,GAAM,OAGjFqD,OAAO0rC,KAAK7wC,KAAK6tC,UAAUkD,QAAQzC,QAAQ,SAAU0C,GACjD,IAAIC,EAAYR,EAAM5C,UAAUkD,OAAOC,GACnCE,EAAgB,KAChBxD,EAAW+C,EACf,SAASU,EAAYtd,GACjB6Z,EAASa,eAAeU,KAAK,SAAUG,GAEnC,GAAIA,GAAWvb,EAAIub,QAGnB,IACI,IAAIpsC,EAASiuC,EAAU/E,OAAOrY,EAAInrB,KAAMmrB,EAAIud,QAE5Cvd,EAAI2R,KAAOxiC,EACX6wB,EAAIwd,MAAQL,EACZnd,EAAI/I,MAAQmmB,EAAUnmB,MACtB+I,EAAImS,eAAiB,WACjB0H,EAASe,SAASzI,eAAeiL,EAAUG,OAAQD,IAEvDtd,EAAIyd,SAAW,WAAc,OAAO5D,EAASe,SAAS6C,SAASzd,EAAI0d,YACnE1d,EAAI2d,eAAiB,WAAc,OAAO9D,EAASe,SAAS+C,eAAe3d,EAAI4d,kBAC/E5d,EAAI6d,sBAAwB,WAAc,OAAOhE,EAASe,SAASiD,sBAAsB7d,EAAI4d,kBAC7F5d,EAAI8d,eAAiBV,EAAUnf,UAC/Bof,EAAczpB,MAAMoM,EAAK7xB,MAAMC,UAAUF,MAAMhB,KAAKiC,IAExD,MAAO0pC,GACHC,QAAQ9Y,IAAI6Y,MAIxB,IAAIkF,EAAW,CACXziB,YAAY,EACZC,IAAK,WACD,OAAO8hB,GAEXvuC,IAAK,SAAUvB,GACNA,IACDA,EAAQ,OAEPA,GAAS8vC,EACVxD,EAASe,SAASzI,eAAeiL,EAAUG,OAAQD,GAE9C/vC,IAAU8vC,GACfxD,EAASe,SAAS5I,GAAGoL,EAAUG,OAAQD,GAE3CD,EAAgB9vC,IAGpBywC,EAAe,KAAOb,EAAUnF,cACT,MAAvB4E,EAAMoB,IACN1sC,OAAOC,eAAeqrC,EAAOoB,EAAcD,GAE/CzsC,OAAOC,eAAeqrC,EAAMM,OAAQC,EAAWY,IAChD5xC,MA2BP,OAxBAqwC,EAASpuC,UAAU6vC,QAAU,SAAUtB,GACnC,OAAO,IAAIH,EAASrwC,KAAKovC,QAASpvC,KAAK6tC,UAAW2C,IAKtDH,EAASpuC,UAAU8vC,OAAS,SAAUC,GAGlC,IAFA,IAAIvB,EAAQzwC,KACRwlC,EAAO,GACFwI,EAAK,EAAGA,EAAKxmB,UAAUxmB,OAAQgtC,IACpCxI,EAAKwI,EAAK,GAAKxmB,UAAUwmB,GAE7B,GAAmB,MAAfhuC,KAAKmvC,OACL,MAAM,IAAIvuC,MAAM,kBAGpB,OAAOZ,KAAKmvC,OAAOS,gBAAgB,CAC/BlnC,KAAM1I,KAAK6tC,UAAUoE,eAAehsB,OAAO+rB,EAAUxM,KACtDyJ,KAAK,SAAUiD,GACd,IAAIxE,EAAW,IAAI2C,EAASrD,EAAUmF,mBAAmBD,GAAKzB,EAAM5C,UAAW4C,EAAMhC,UAErF,OADAvB,EAAa0D,eAAelD,EAAU,oBAAqBwE,GACpDxE,KAGR2C,EAjIkB,GAmI7B5wC,EAAQ4wC,SAAWA,GAEjB,CAAC+B,mBAAmB,GAAGC,qBAAqB,GAAGC,kBAAkB,GAAGC,sBAAsB,GAAGC,cAAc,KAAKC,GAAG,CAAC,SAAS/xC,EAAQhB,EAAOD,GAC9I,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAIsxC,EAAahyC,EAAQ,cACzBjB,EAAQ4wC,SAAWqC,EAAWrC,SAC9B,IAAItD,EAAcrsC,EAAQ,eAC1BjB,EAAQkxC,UAAY5D,EAAY4D,WAE9B,CAACgC,aAAa,GAAGH,cAAc,KAAKI,GAAG,CAAC,SAASlyC,EAAQhB,EAAOD,GAClE,aACA,IACQozC,EADJC,EAAa9yC,MAAQA,KAAK8yC,YACtBD,EAAgB1tC,OAAO4tC,gBACtB,CAAEC,UAAW,cAAgBhxC,OAAS,SAAUurB,EAAGxgB,GAAKwgB,EAAEylB,UAAYjmC,IACvE,SAAUwgB,EAAGxgB,GAAK,IAAK,IAAIyK,KAAKzK,EAAOA,EAAEijB,eAAexY,KAAI+V,EAAE/V,GAAKzK,EAAEyK,KAClE,SAAU+V,EAAGxgB,GAEhB,SAASkmC,IAAOjzC,KAAKwJ,YAAc+jB,EADnCslB,EAActlB,EAAGxgB,GAEjBwgB,EAAEtrB,UAAkB,OAAN8K,EAAa5H,OAAOo5B,OAAOxxB,IAAMkmC,EAAGhxC,UAAY8K,EAAE9K,UAAW,IAAIgxC,KAGnFpG,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAEtD,IAAI8xC,EAAcxyC,EAAQ,sBACtBusC,EAAcvsC,EAAQ,sBACtBurC,EAAYvrC,EAAQ,oBACpByyC,EAAczyC,EAAQ,sBACtB0yC,EAAS1yC,EAAQ,iBACjBwsC,EAAexsC,EAAQ,uBACvBysC,EAASN,EAAansC,EAAQ,oBAClC,SAAS2yC,EAAYtF,GACjB,IAAIuF,EAAQ,GACRC,EAAQ,GAoBZ,OAnBAxF,EAAOO,QAAQ,SAAUkF,GACrB,GAAwB,MAApBA,EAAMzE,WAAoB,CAC1B,GAAmC,UAA/ByE,EAAMtwB,KAAKuwB,UAAU,EAAG,GACxB,MAAM,IAAI7yC,MAAM,oCAEpB,IAAI8yC,EAAS,GACTC,EAAeH,EAAMtwB,KAAK0wB,QAAQ,KAClB,GAAhBD,IACAD,EAASF,EAAMtwB,KAAKuwB,UAAUE,IAElC,IAAI3wC,EAASqwC,EAAYG,EAAMzE,YAC/BuE,EAAMlwC,KAAK,CAAEtB,KAAO0xC,EAAM1xC,MAAQ,KAAOwxC,MAAOtwC,EAAOswC,QACvDC,EAAMnwC,KAAK,SAAWJ,EAAOuwC,MAAM7vC,KAAK,KAAO,IAAMgwC,QAGrDJ,EAAMlwC,KAAKowC,EAAM1xC,MAAQ,MACzByxC,EAAMnwC,KAAKowC,EAAMtwB,QAGlB,CACHowB,MAAOA,EACPC,MAAOA,GAGf,IAAIM,EACA,SAAiBzyC,GACb8rC,EAAa0D,eAAe5wC,KAAM,WAAW,GAC7CktC,EAAa0D,eAAe5wC,KAAM,OAAQoB,IAIlD3B,EAAQo0C,QAAUA,EAClB,IAAIC,EACA,SAAqBC,GACjB,IAAK,IAAI7uC,KAAO6uC,EAAM,CAClB,IAAI3yC,EAAQ2yC,EAAK7uC,GACJ,MAAT9D,GAAoC,iBAAZ,EACxB8rC,EAAa8G,aAAah0C,KAAMkF,EAAK6uC,EAAK7uC,IAG1CgoC,EAAa0D,eAAe5wC,KAAMkF,EAAK6uC,EAAK7uC,MAOxD+uC,EAAmC,SAAUC,GAE7C,SAASD,IACL,OAAkB,OAAXC,GAAmBA,EAAOzsB,MAAMznB,KAAMwnB,YAAcxnB,KAmC/D,OArCA8yC,EAAUmB,EAAmBC,GAI7BD,EAAkBhyC,UAAUgkB,OAAS,SAAU+rB,EAAUjE,GAChD9B,EAAUkI,YAAYnC,IACvB7E,EAAOqC,WAAW,4BAA6BrC,EAAOiH,iBAAkB,CACpE3yC,IAAK,WACLyhB,YAAa,EACb9hB,MAAO4wC,IAGXjE,EAAO/sC,OAAShB,KAAKkuC,OAAOltC,OAC5BmsC,EAAOqC,WAAW,+BAAgCrC,EAAOkH,iBAAkB,CACvE5yC,IAAMzB,KAAKkuC,OAAOH,EAAO/sC,QAAQc,MAAQ,UACzCwyC,MAAOvG,EAAO/sC,OACduzC,cAAev0C,KAAKkuC,OAAOltC,SAG1B+sC,EAAO/sC,OAAShB,KAAKkuC,OAAOltC,QACjCmsC,EAAOqC,WAAW,iCAAkCrC,EAAOqH,oBAAqB,CAC5EF,MAAOvG,EAAO/sC,OACduzC,cAAev0C,KAAKkuC,OAAOltC,SAGnC,IACI,OAAQgxC,EAAWkB,EAAYuB,gBAAgBxuB,OAAOjmB,KAAKkuC,OAAQH,GAAQ0F,UAAU,GAEzF,MAAO/G,GACHS,EAAOqC,WAAW,+BAAgCrC,EAAOiH,iBAAkB,CACvE3yC,IAAKirC,EAAMjrC,IACXsxB,OAAQ2Z,EAAM3Z,OACd3xB,MAAOsrC,EAAMtrC,QAGrB,OAAO,MAEJ6yC,EAtC2B,CADtCx0C,EAAQq0C,YAAcA,GAyCtBr0C,EAAQw0C,kBAAoBA,EAC5B,IAAIS,EAAqC,SAAUR,GAE/C,SAASQ,IACL,OAAkB,OAAXR,GAAmBA,EAAOzsB,MAAMznB,KAAMwnB,YAAcxnB,KA2C/D,OA7CA8yC,EAAU4B,EAAqBR,GAI/BQ,EAAoBzyC,UAAUgkB,OAAS,SAAU8nB,GACzCA,EAAO/sC,OAAShB,KAAKkuC,OAAOltC,OAC5BmsC,EAAOqC,WAAW,yBAA0BrC,EAAOkH,iBAAkB,CACjE5yC,IAAMzB,KAAKkuC,OAAOH,EAAO/sC,QAAQc,MAAQ,UACzCwyC,MAAOvG,EAAO/sC,OACduzC,cAAev0C,KAAKkuC,OAAOltC,OAC3Bc,KAAM9B,KAAK8B,OAGVisC,EAAO/sC,OAAShB,KAAKkuC,OAAOltC,QACjCmsC,EAAOqC,WAAW,2BAA4BrC,EAAOqH,oBAAqB,CACtEF,MAAOvG,EAAO/sC,OACduzC,cAAev0C,KAAKkuC,OAAOltC,SAGnC,IACI,OAAOhB,KAAK20C,QAAUzB,EAAYuB,gBAAgBxuB,OAAOjmB,KAAKkuC,OAAQH,GAAQ0F,UAAU,GAE5F,MAAO/G,GACHS,EAAOqC,WAAW,yBAA0BrC,EAAOiH,iBAAkB,CACjE3yC,IAAKirC,EAAMjrC,IACXsxB,OAAQ2Z,EAAM3Z,OACd3xB,MAAOsrC,EAAMtrC,QAGrB,OAAO,MAEXszC,EAAoBzyC,UAAUiqC,OAAS,SAAUxjC,GAC7C,IACI,OAAOwqC,EAAYuB,gBAAgBvI,OAAOlsC,KAAKuvC,QAAStD,EAAUI,SAAS3jC,IAE/E,MAAOgkC,GACHS,EAAOqC,WAAW,mCAAoCrC,EAAOiH,iBAAkB,CAC3E3yC,IAAK,OACLmzC,SAAUlI,EAAMjrC,IAChBozC,WAAYnI,EAAMtrC,MAClBA,MAAOsH,EACPqqB,OAAQ2Z,EAAM3Z,WAInB2hB,EA9C6B,CA+CtCZ,GAGF,SAASgB,KAFTr1C,EAAQi1C,oBAAsBA,EAG9B,IAAIK,EAAkC,SAAUb,GAE5C,SAASa,IACL,OAAkB,OAAXb,GAAmBA,EAAOzsB,MAAMznB,KAAMwnB,YAAcxnB,KAqD/D,OAvDA8yC,EAAUiC,EAAkBb,GAI5Ba,EAAiB9yC,UAAUiqC,OAAS,SAAUxjC,EAAM0oC,GAElC,MAAVA,GAAmBpxC,KAAKg1C,YACxB5D,EAASA,EAAOrvC,MAAM,IAE1B,IAAIkzC,EAAe,GAAIC,EAAkB,GACrCC,EAAe,GAiBnB,GAhBAn1C,KAAKkuC,OAAOI,QAAQ,SAAUkF,EAAO/tC,GAC7B+tC,EAAM4B,QACa,WAAf5B,EAAMtwB,MAAoC,UAAfswB,EAAMtwB,MAA+C,GAA3BswB,EAAMtwB,KAAK0wB,QAAQ,MAA4C,UAA/BJ,EAAMtwB,KAAKuwB,UAAU,EAAG,IAC7GwB,EAAa7xC,KAAK,CAAE8f,KAAM,UAAWphB,KAAO0xC,EAAM1xC,MAAQ,KAC1DqzC,EAAa/xC,MAAK,KAGlB6xC,EAAa7xC,KAAKowC,GAClB2B,EAAa/xC,MAAK,KAItB8xC,EAAgB9xC,KAAKowC,GACrB2B,EAAa/xC,MAAK,MAGZ,MAAVguC,EACA,IAAIiE,EAAgBnC,EAAYuB,gBAAgBvI,OAAO+I,EAAchJ,EAAU3lB,OAAO8qB,IAE1F,IAAIkE,EAAmBpC,EAAYuB,gBAAgBvI,OAAOgJ,EAAiBjJ,EAAUI,SAAS3jC,IAC1F1F,EAAS,IAAI8xC,EACbS,EAAkB,EAAGC,EAAe,EAqBxC,OApBAx1C,KAAKkuC,OAAOI,QAAQ,SAAU5tB,EAAOjb,GAC7Bib,EAAM00B,QACQ,MAAVhE,EACApuC,EAAOyC,GAAS,IAAIouC,EAAQ,MAEvBsB,EAAa1vC,GAClBzC,EAAOyC,GAAS,IAAIouC,EAAQwB,EAAcG,MAG1CxyC,EAAOyC,GAAS4vC,EAAcG,KAIlCxyC,EAAOyC,GAAS6vC,EAAiBC,KAEjC70B,EAAM5e,OACNkB,EAAO0d,EAAM5e,MAAQkB,EAAOyC,MAGpCzC,EAAOhC,OAAShB,KAAKkuC,OAAOltC,OACrBgC,GAEJ+xC,EAxD0B,CAyDnCjB,GAMF,SAAS2B,EAAU5V,GACf,OAAQA,EAAO3c,MACX,IAAK,cACD,IAAI9c,EAAc,IAAI6tC,EAAkB,CACpC/F,OAAQrO,EAAOqO,OACfwH,QAA4B,MAAlB7V,EAAO6V,WAAqB7V,EAAO6V,QAC7CxyB,KAAM,WAELljB,KAAKiyC,iBACNjyC,KAAKiyC,eAAiB7rC,GAE1B,MAEJ,IAAK,WAGD0rB,GADIA,EAAY,IAAMuhB,EAAYxT,EAAOqO,QAAQqF,MAAM7vC,KAAK,KAAO,KAC7C2H,QAAQ,SAAU,IACxCymB,EAAY+N,EAAO/9B,KAAOgwB,EAC1B,IAAI6iB,EAAUxB,EAAYwC,UAAUvC,EAAOwC,YAAY9jB,IAAY2hB,UAAU,EAAG,IAC5ErtC,EAAc,IAAIsuC,EAAoB,CACtCxG,OAAQrO,EAAOqO,OACfqB,QAAS1P,EAAO0P,QAChBmG,QAA4B,MAAlB7V,EAAO6V,WAAqB7V,EAAO6V,QAC7CxyB,KAAQ2c,EAAe,SAAI,OAAS,cACpC/N,UAAWA,EACX6iB,QAASA,IAGT9U,EAAO/9B,MAAuC,MAA/B9B,KAAK8tC,UAAUjO,EAAO/9B,OACrCorC,EAAa0D,eAAe5wC,KAAK8tC,UAAWjO,EAAO/9B,KAAMsE,GAGhB,MAAzCpG,KAAK8tC,UAAU1nC,EAAY0rB,YAC3Bob,EAAa0D,eAAe5wC,KAAK8tC,UAAW1nC,EAAY0rB,UAAW1rB,GAEvE,MAEJ,IAAK,QAID,IAAI0rB,EACJA,GADIA,EAAY,IAAMuhB,EAAYxT,EAAOqO,QAAQqF,MAAM7vC,KAAK,KAAO,KAC7C2H,QAAQ,SAAU,IACxCymB,EAAY+N,EAAO/9B,KAAOgwB,EACtB1rB,EAAc,IAAI2uC,EAAiB,CACnCjzC,KAAM+9B,EAAO/9B,KACbgwB,UAAWA,EACXoc,OAAQrO,EAAOqO,OACfkD,OAAQ,CAAC+B,EAAYwC,UAAUvC,EAAOwC,YAAY9jB,KAClDkjB,YAAcnV,EAAOmV,UACrB9xB,KAAM,UAGN2c,EAAO/9B,MAAoC,MAA5B9B,KAAK+wC,OAAOlR,EAAO/9B,OAClCorC,EAAa0D,eAAe5wC,KAAK+wC,OAAQlR,EAAO/9B,KAAMsE,GAGhB,MAAtCpG,KAAK+wC,OAAO3qC,EAAY0rB,YACxBob,EAAa0D,eAAe5wC,KAAK+wC,OAAQ3qC,EAAY0rB,UAAW1rB,GAEpE,MAEJ,IAAK,WAED,MACJ,QACIumC,QAAQ9Y,IAAI,mCAAqCgM,EAAO3c,OAvEpEzjB,EAAQs1C,iBAAmBA,EA2E3B,IAAIpE,EAA2B,WAC3B,SAASA,EAAUkF,GACf,IAAIpF,EAAQzwC,KAEZ,GADAmtC,EAAOuD,SAAS1wC,KAAM2wC,GACD,iBAAV,EAAoB,CAC3B,IACIkF,EAAMhrB,KAAKC,MAAM+qB,GAErB,MAAOnJ,GACHS,EAAOqC,WAAW,2BAA4BrC,EAAOiH,iBAAkB,CACnE3yC,IAAK,MACLq0C,aAAcpJ,EAAMlN,QACpBp+B,MAAOy0C,IAGf,IAAK7zC,MAAME,QAAQ2zC,GAEf,OADA1I,EAAOqC,WAAW,cAAerC,EAAOiH,iBAAkB,CAAE3yC,IAAK,MAAOL,MAAOy0C,IACxE,KAGf3I,EAAa0D,eAAe5wC,KAAM,YAAa,IAC/CktC,EAAa0D,eAAe5wC,KAAM,SAAU,IAE5CA,KAAK+1C,KAAO,GACZF,EAAIvH,QAAQ,SAAU0H,GACQ,iBAAf,IACPA,EAAW9C,EAAY+C,eAAeD,IAE1CvF,EAAMsF,KAAK3yC,KAAK4yC,KAEpBh2C,KAAK+1C,KAAKzH,QAAQmH,EAAWz1C,MAExBA,KAAKiyC,gBACNwD,EAAU10C,KAAKf,KAAM,CAAEkjB,KAAM,cAAegrB,OAAQ,KAuB5D,OApBAyC,EAAU1uC,UAAUi0C,iBAAmB,SAAUhE,GAC7C,IAAIyC,EAAUzC,EAAGxpC,KAAK+qC,UAAU,EAAG,IAAI5H,cACvC,IAAK,IAAI/pC,KAAQ9B,KAAK8tC,UAClB,IAA2B,IAAvBhsC,EAAK8xC,QAAQ,KAAjB,CAGA,IAAIuC,EAAOn2C,KAAK8tC,UAAUhsC,GAC1B,GAAIq0C,EAAKxB,UAAYA,EAEjB,MAAO,CACHnP,KAFS0N,EAAYuB,gBAAgBvI,OAAOiK,EAAKjI,OAAQ,KAAOgE,EAAGxpC,KAAK+qC,UAAU,KAGlF3hB,UAAWqkB,EAAKrkB,UAChB6iB,QAASwB,EAAKxB,QACdzI,OAAQiK,EAAKjK,OACb9qC,MAAO6rC,EAAYmJ,aAAalE,EAAG9wC,OAAS,IAIxD,OAAO,MAEJuvC,EAxDmB,GA0D9BlxC,EAAQkxC,UAAYA,GAElB,CAAC0F,qBAAqB,GAAGhE,qBAAqB,GAAGiE,mBAAmB,GAAGhE,kBAAkB,GAAGiE,qBAAqB,GAAGhE,sBAAsB,GAAGiE,gBAAgB,KAAKC,GAAG,CAAC,SAAS/1C,EAAQhB,EAAOD,GAChM,aACA,IACQozC,EADJC,EAAa9yC,MAAQA,KAAK8yC,YACtBD,EAAgB1tC,OAAO4tC,gBACtB,CAAEC,UAAW,cAAgBhxC,OAAS,SAAUurB,EAAGxgB,GAAKwgB,EAAEylB,UAAYjmC,IACvE,SAAUwgB,EAAGxgB,GAAK,IAAK,IAAIyK,KAAKzK,EAAOA,EAAEijB,eAAexY,KAAI+V,EAAE/V,GAAKzK,EAAEyK,KAClE,SAAU+V,EAAGxgB,GAEhB,SAASkmC,IAAOjzC,KAAKwJ,YAAc+jB,EADnCslB,EAActlB,EAAGxgB,GAEjBwgB,EAAEtrB,UAAkB,OAAN8K,EAAa5H,OAAOo5B,OAAOxxB,IAAMkmC,EAAGhxC,UAAY8K,EAAE9K,UAAW,IAAIgxC,KAGnFpG,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAIs1C,EAAah2C,EAAQ,cACrBurC,EAAYvrC,EAAQ,oBACpBi2C,EAAQj2C,EAAQ,gBAChBysC,EAASN,EAAansC,EAAQ,oBAElC,SAASk2C,EAAqB3I,GAC1B,IAAIjrC,EAAS,GACb,IAAK,IAAIkC,KAAO+oC,EACZ,GAAwB,MAApBA,EAAY/oC,GAAhB,CAGA,IAAI9D,EAAQ6qC,EAAU4K,QAAQ5I,EAAY/oC,KACtC,CAAEooC,UAAU,EAAMC,UAAU,EAAMzc,OAAO,EAAM1vB,OAAO,IAAO8D,KAC7D9D,EAAQ6qC,EAAU6K,cAAc11C,IAEpC4B,EAAOI,KAAK8B,EAAM,IAAM9D,GAE5B,OAAO4B,EAAOU,KAAK,KAEvB,SAASqzC,EAAU/zC,GAEf,GAAqB,GAAjBA,EAAOg0C,SAAmC,qBAAnBh0C,EAAOw8B,SAAqD,0BAAnBx8B,EAAOw8B,SACvE,OAAOx8B,EAAOA,OAElB,GAAqB,GAAjBA,EAAOg0C,QAAiC,MAAlBh0C,EAAOw8B,QAAiB,CAE9C,IAAIkN,EAAQ,IAAI9rC,MAAM,oBAEtB,MADA8rC,EAAM1pC,OAAS6nB,KAAKosB,UAAUj0C,GACxB0pC,EAEV,OAAO1pC,EAAOA,OAElB,SAASk0C,EAAcl0C,GACnB,GAAsB,OAAlBA,EAAOm0C,QAIP,MAFIzK,EAAQ,IAAI9rC,MAAM,qBAChBoC,OAAS6nB,KAAKosB,UAAUj0C,GACxB0pC,EAEV,GAAI1pC,EAAO0pC,MAAO,CAEd,IAAIA,EAAQ,IAAI9rC,MAAMoC,EAAO0pC,MAAMlN,SAAW,iBAO9C,MANIx8B,EAAO0pC,MAAM7rC,OACb6rC,EAAM7rC,KAAOmC,EAAO0pC,MAAM7rC,MAE1BmC,EAAO0pC,MAAMhkC,OACbgkC,EAAMhkC,KAAO1F,EAAO0pC,MAAMhkC,MAExBgkC,EAEV,OAAO1pC,EAAOA,OAGlB,SAASo0C,EAAYC,GACjB,GAAiB,YAAbA,EACA,MAAM,IAAIz2C,MAAM,yBAEpB,MAAiB,WAAby2C,EACOA,EAEJh2C,SAASg2C,EAAS5D,UAAU,GAAI,IAE3C,IAAI6D,EAAmC,SAAUpD,GAE7C,SAASoD,EAAkBvH,EAASwH,GAChC,IAAI9G,EAAQyD,EAAOnzC,KAAKf,KAAM+vC,GAAW,cAAgB/vC,KACzDmtC,EAAOuD,SAASD,EAAO6G,GACvB,IAAIx1C,EAAO,UACP2uC,EAAMV,UACNjuC,EAAO2uC,EAAMV,QAAQjuC,MAEzB,IAAI01C,EAAU,KACd,OAAQ11C,GACJ,IAAK,YACD01C,EAAU,2BACV,MACJ,IAAK,UACDA,EAAU,mCACV,MACJ,IAAK,UACDA,EAAU,mCACV,MACJ,IAAK,QACDA,EAAU,iCACV,MACJ,QACI,MAAM,IAAI52C,MAAM,uBAIxB,OAFA6vC,EAAM+G,QAAUA,EAChB/G,EAAM8G,OAASA,EACR9G,EA6KX,OAxMAqC,EAAUwE,EAAmBpD,GA6B7BoD,EAAkBr1C,UAAUw1C,QAAU,SAAU5X,EAAQkO,GAEpD,IAAI2J,EAAM13C,KAAKw3C,QACXD,EAAS,GAIb,OAHIv3C,KAAKu3C,SACLA,GAAU,WAAav3C,KAAKu3C,QAExB1X,GACJ,IAAK,iBAED,OADA6X,GAAO,2CAA6CH,EAC7CZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,cAED,OADAQ,GAAO,wCAA0CH,EAC1CZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,aAID,OAFAQ,GAAO,8CAAgD3J,EAAOqB,QAC9DsI,GAAO,QAAU3J,EAAOsJ,SAAWE,EAC5BZ,EAAMgB,UAAUD,EAAK,KAAMX,GACtC,IAAK,sBAGD,OAFAW,GAAO,4DAA8D3J,EAAOqB,QAC5EsI,GAAO,QAAU3J,EAAOsJ,SAAWE,EAC5BZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,UAGD,OAFAQ,GAAO,gDAAkD3J,EAAOqB,QAChEsI,GAAO,QAAU3J,EAAOsJ,SAAWE,EAC5BZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,eAID,OAHAQ,GAAO,qDAAuD3J,EAAOqB,QACrEsI,GAAO,aAAe3J,EAAO6J,SAC7BF,GAAO,QAAU3J,EAAOsJ,SAAWE,EAC5BZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,kBAGD,OAFAQ,GAAO,uDAAyD3J,EAAOqC,kBACvEsH,GAAOH,EACAZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,WACD,GAAInJ,EAAOsJ,SAIP,OAHAK,GAAO,qDAAuD3J,EAAOsJ,SACrEK,GAAO,iBACPA,GAAOH,EACAZ,EAAMgB,UAAUD,EAAK,KAAMR,GAEtC,MAAM,IAAIt2C,MAAM,yCACpB,IAAK,iBAGD,OAFA82C,GAAO,4DAA8D3J,EAAO0D,gBAC5EiG,GAAOH,EACAZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,wBAGD,OAFAQ,GAAO,6DAA+D3J,EAAO0D,gBAC7EiG,GAAOH,EACAZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,OAOD,OANIjJ,EAAc2I,EAAqB7I,EAAOE,gBAE1CA,EAAc,IAAMA,GAExByJ,GAAO,oCAAsCzJ,EAC7CyJ,GAAOH,EACAZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,cACD,IAAIjJ,EAMJ,OANIA,EAAc2I,EAAqB7I,EAAOE,gBAE1CA,EAAc,IAAMA,GAExByJ,GAAO,4CAA8CzJ,EACrDyJ,GAAOH,EACAZ,EAAMgB,UAAUD,EAAK,KAAMR,GACtC,IAAK,UACDQ,GAAO,kCACP,IAWI,GAVI3J,EAAO8J,OAAOC,YACdJ,GAAO,cAAgBN,EAAYrJ,EAAO8J,OAAOC,YAEjD/J,EAAO8J,OAAOE,UACdL,GAAO,YAAcN,EAAYrJ,EAAO8J,OAAOE,UAE/ChK,EAAO8J,OAAOzI,UACdsI,GAAO,YAAc3J,EAAO8J,OAAOzI,SAGnCrB,EAAO8J,OAAOzG,QAAwC,EAA9BrD,EAAO8J,OAAOzG,OAAOpwC,OAAY,CACzD,GAAkC,EAA9B+sC,EAAO8J,OAAOzG,OAAOpwC,OACrB,MAAM,IAAIJ,MAAM,4BAEpB,IAAIo3C,EAASjK,EAAO8J,OAAOzG,OAAO,GAClC,GAAwB,iBAAb,GAA2C,KAAlB4G,EAAOh3C,OACvC,MAAM,IAAIJ,MAAM,6BAEpB82C,GAAO,WAAaM,GAG5B,MAAOtL,GACH,OAAOkC,QAAQc,OAAOhD,GAE1BgL,GAAOH,EACP,IAAIx3C,EAAOC,KACX,OAAO22C,EAAMgB,UAAUD,EAAK,KAAMX,GAAW9H,KAAK,SAAUgJ,GACxD,IAAIC,EAAM,GACNC,EAAMvJ,QAAQI,UAgBlB,OAfAiJ,EAAK3J,QAAQ,SAAUza,GACnBskB,EAAMA,EAAIlJ,KAAK,WACX,OAAqB,MAAjBpb,EAAI0d,UACG,MAEX1d,EAAI0d,UAAY2G,EAAIrkB,EAAI4d,iBACH,MAAjB5d,EAAI0d,UACGxxC,EAAKyxC,eAAe3d,EAAI4d,iBAAiBxC,KAAK,SAAUiD,GAC3DgG,EAAIrkB,EAAI4d,iBAAmBS,EAAGX,UAC9B1d,EAAI0d,UAAYW,EAAGX,YAGpB,UAGR4G,EAAIlJ,KAAK,WACZ,OAAOgJ,MAGnB,IAAK,gBACD,MAA0B,cAAtBj4C,KAAK+vC,QAAQjuC,KACN8sC,QAAQI,QAAQ,IAE3B0I,GAAO,oCACPA,GAAOH,EACAZ,EAAMgB,UAAUD,EAAK,KAAMX,GAAW9H,KAAK,SAAUjsC,GACxD,OAAOo1C,WAAWp1C,EAAOq1C,WAKrC,OAAOnE,EAAOjyC,UAAUw1C,QAAQ12C,KAAKf,KAAM6/B,EAAQkO,IAEvDuJ,EAAkBr1C,UAAUq2C,WAAa,SAAUhI,EAAeiI,EAAYC,GAC1E,IAAId,EAAM13C,KAAKw3C,QACXD,EAAS,GAUb,OATIv3C,KAAKu3C,SACLA,GAAU,WAAav3C,KAAKu3C,QAEd,MAAdgB,IACAA,EAAa,GAED,MAAZC,IACAA,EAAW,UAERx4C,KAAK8uC,YAAYwB,GAAerB,KAAK,SAAUG,GAKlD,OAJAsI,GAAO,6CAA+CtI,EACtDsI,GAAO,eAAiBa,EACxBb,GAAO,aAAec,EACtBd,GAAO,YAAcH,EACdZ,EAAMgB,UAAUD,EAAK,KAAMX,GAAW9H,KAAK,SAAUjsC,GACxD,IAAI2d,EAAS,GAgBb,OAfA3d,EAAOsrC,QAAQ,SAAU4D,GACrB,CAAC,kBAAmB,MAAM5D,QAAQ,SAAUppC,GACzB,IAAXgtC,EAAGhtC,WACIgtC,EAAGhtC,KAGA,MAAdgtC,EAAGuG,SAAyC,MAAtBvG,EAAGwG,kBACzBxG,EAAGuG,QAAUvG,EAAGwG,iBAEpB,IAAIC,EAAOjC,EAAWkC,yBAAyB1G,GAC3CA,EAAG2G,YACHF,EAAKG,UAAYz3C,SAAS6wC,EAAG2G,YAEjCl4B,EAAOvd,KAAKu1C,KAETh4B,OAIZ22B,EAzM2B,CA0MpCZ,EAAWqC,UACbt5C,EAAQ63C,kBAAoBA,GAE1B,CAAChB,mBAAmB,GAAGhE,kBAAkB,GAAG0G,eAAe,GAAGC,aAAa,KAAKC,GAAG,CAAC,SAASx4C,EAAQhB,EAAOD,GAC9G,aACA,IACQozC,EADJC,EAAa9yC,MAAQA,KAAK8yC,YACtBD,EAAgB1tC,OAAO4tC,gBACtB,CAAEC,UAAW,cAAgBhxC,OAAS,SAAUurB,EAAGxgB,GAAKwgB,EAAEylB,UAAYjmC,IACvE,SAAUwgB,EAAGxgB,GAAK,IAAK,IAAIyK,KAAKzK,EAAOA,EAAEijB,eAAexY,KAAI+V,EAAE/V,GAAKzK,EAAEyK,KAClE,SAAU+V,EAAGxgB,GAEhB,SAASkmC,IAAOjzC,KAAKwJ,YAAc+jB,EADnCslB,EAActlB,EAAGxgB,GAEjBwgB,EAAEtrB,UAAkB,OAAN8K,EAAa5H,OAAOo5B,OAAOxxB,IAAMkmC,EAAGhxC,UAAY8K,EAAE9K,UAAW,IAAIgxC,KAGnFpG,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAIs1C,EAAah2C,EAAQ,cACrBysC,EAASN,EAAansC,EAAQ,oBAKlC,SAASy4C,EAAcC,GACnB,IAAIp2C,GAAS,EACTq2C,EAAQ,KAoBZ,OAnBAD,EAAS9K,QAAQ,SAAUyB,GAER,MAAXA,EAKS,MAATsJ,EAKAA,EAAMv3C,OAASiuC,EAAQjuC,MACvBu3C,EAAMxJ,UAAYE,EAAQF,SAC1BwJ,EAAMC,aAAevJ,EAAQuJ,YAGjCnM,EAAOqC,WAAW,oBAAqBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,YAAa23C,SAAUA,IAT1FC,EAAQtJ,EALR/sC,GAAS,IAgBVA,EAEX,IAAIu2C,EAAkC,SAAUrF,GAE5C,SAASqF,EAAiBC,GACtB,IAAI/I,EAAQzwC,KACZ,GAAyB,IAArBw5C,EAAUx4C,OACV,MAAM,IAAIJ,MAAM,gBAmBpB,OAjBYu4C,EAAcK,EAAUzwB,IAAI,SAAUvR,GAAK,OAAOA,EAAEu4B,YAE5DU,EAAQyD,EAAOnzC,KAAKf,KAAMw5C,EAAU,GAAGzJ,UAAY/vC,KACnDmtC,EAAOuD,SAASD,EAAO8I,KAGvB9I,EAAQyD,EAAOnzC,KAAKf,KAAM,OAASA,KACnCmtC,EAAOuD,SAASD,EAAO8I,GAEvB9I,EAAMgJ,MAAQ7K,QAAQC,IAAI2K,EAAUzwB,IAAI,SAAUvR,GAAK,OAAOA,EAAEs4B,gBAAkBb,KAAK,SAAUmK,GAI7F,OAHKD,EAAcC,IACfjM,EAAOqC,WAAW,2BAA4BrC,EAAOuM,cAAe,IAEjEN,EAAS,MAGxB3I,EAAMkJ,WAAaH,EAAUz3C,MAAM,GAC5B0uC,EAgCX,OAvDAqC,EAAUyG,EAAkBrF,GAyB5B/uC,OAAOC,eAAem0C,EAAiBt3C,UAAW,YAAa,CAC3DmtB,IAAK,WACD,OAAOpvB,KAAK25C,WAAW53C,MAAM,IAEjCotB,YAAY,EACZD,cAAc,IAElBqqB,EAAiBt3C,UAAUw1C,QAAU,SAAU5X,EAAQkO,GAEnD,IAAIyL,EAAYx5C,KAAKw5C,UACrB,OAAO,IAAI5K,QAAQ,SAAUI,EAASU,GAClC,IAAIkK,EAAa,MACjB,SAAS94B,IACA04B,EAAUx4C,OAIAw4C,EAAU5+B,QAChB68B,QAAQ5X,EAAQkO,GAAQkB,KAAK,SAAUjsC,GAC5CgsC,EAAQhsC,IACT,SAAU0pC,GACJkN,IACDA,EAAalN,GAEjB5rB,MAVA4uB,EAAOkK,GAaf94B,MAGDy4B,EAxD0B,CAyDnC7C,EAAWqC,UACbt5C,EAAQ85C,iBAAmBA,GAEzB,CAACjH,kBAAkB,GAAG2G,aAAa,KAAKY,GAAG,CAAC,SAASn5C,EAAQhB,EAAOD,GACtE,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAIs1C,EAAah2C,EAAQ,cACzBjB,EAAQs5C,SAAWrC,EAAWqC,SAC9B,IAAIe,EAAuBp5C,EAAQ,wBACnCjB,EAAQ63C,kBAAoBwC,EAAqBxC,kBACjD,IAAIyC,EAAsBr5C,EAAQ,uBAClCjB,EAAQ85C,iBAAmBQ,EAAoBR,iBAE/C,IAAIS,EAAoBt5C,EAAQ,qBAChCjB,EAAQw6C,eAAiBD,EAAkBC,eAC3C,IAAIC,EAAsBx5C,EAAQ,uBAClCjB,EAAQ06C,gBAAkBD,EAAoBC,gBAC9C,IAAIC,EAAkB15C,EAAQ,mBAC9BjB,EAAQ46C,aAAeD,EAAgBC,aAOvC56C,EAAQ66C,mBANR,SAA4BvK,GACxB,OAAO,IAAIgK,EAAoBR,iBAAiB,CAC5C,IAAIS,EAAkBC,eAAelK,GACrC,IAAI+J,EAAqBxC,kBAAkBvH,OAKjD,CAACwK,uBAAuB,GAAGC,sBAAsB,GAAGC,oBAAoB,GAAGC,sBAAsB,GAAGzB,aAAa,GAAG0B,kBAAkB,KAAKC,GAAG,CAAC,SAASl6C,EAAQhB,EAAOD,GACzK,aACA,IACQozC,EADJC,EAAa9yC,MAAQA,KAAK8yC,YACtBD,EAAgB1tC,OAAO4tC,gBACtB,CAAEC,UAAW,cAAgBhxC,OAAS,SAAUurB,EAAGxgB,GAAKwgB,EAAEylB,UAAYjmC,IACvE,SAAUwgB,EAAGxgB,GAAK,IAAK,IAAIyK,KAAKzK,EAAOA,EAAEijB,eAAexY,KAAI+V,EAAE/V,GAAKzK,EAAEyK,KAClE,SAAU+V,EAAGxgB,GAEhB,SAASkmC,IAAOjzC,KAAKwJ,YAAc+jB,EADnCslB,EAActlB,EAAGxgB,GAEjBwgB,EAAEtrB,UAAkB,OAAN8K,EAAa5H,OAAOo5B,OAAOxxB,IAAMkmC,EAAGhxC,UAAY8K,EAAE9K,UAAW,IAAIgxC,KAGnFpG,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI84C,EAAsBx5C,EAAQ,uBAC9Bm6C,EAAan6C,EAAQ,cACrBysC,EAASN,EAAansC,EAAQ,oBAC9Bu5C,EAAgC,SAAU/F,GAE1C,SAAS+F,EAAelK,EAAS+K,GAC7B,IAAIrK,EAAQzwC,KAER+6C,EAAO,KACX,QAFAhL,EAAU8K,EAAW/K,WAAWC,GAAW,cAE3BjuC,MACZ,IAAK,YACDi5C,EAAO,oBACP,MACJ,IAAK,UACDA,EAAO,oBACP,MACJ,IAAK,UACDA,EAAO,oBACP,MACJ,IAAK,QACDA,EAAO,kBACP,MACJ,QACI,MAAM,IAAIn6C,MAAM,uBAKxB,OAHA6vC,EAAQyD,EAAOnzC,KAAKf,KAAM,WAAa+6C,EAAO,KAAOD,GAAkB,IAAK/K,IAAY/vC,KACxFmtC,EAAOuD,SAASD,EAAOwJ,GACvBxJ,EAAMqK,eAAkBA,GAAkB,KACnCrK,EAYX,OApCAqC,EAAUmH,EAAgB/F,GA0B1B+F,EAAeh4C,UAAU+4C,cAAgB,WACrCrO,QAAQ9Y,IAAI,qDAEhBomB,EAAeh4C,UAAUg5C,UAAY,SAAU7L,GAE3C,OADAjC,EAAOqC,WAAW,kCAAmCrC,EAAO+N,sBAAuB,CAAEC,UAAW,cACzF,MAEXlB,EAAeh4C,UAAUm5C,aAAe,WACpC,OAAOxM,QAAQI,QAAQ,KAEpBiL,EArCwB,CAsCjCC,EAAoBC,iBACtB16C,EAAQw6C,eAAiBA,GAEvB,CAAC3H,kBAAkB,GAAGoI,sBAAsB,GAAGW,aAAa,KAAKC,GAAG,CAAC,SAAS56C,EAAQhB,EAAOD,GAC/F,aACA,IACQozC,EADJC,EAAa9yC,MAAQA,KAAK8yC,YACtBD,EAAgB1tC,OAAO4tC,gBACtB,CAAEC,UAAW,cAAgBhxC,OAAS,SAAUurB,EAAGxgB,GAAKwgB,EAAEylB,UAAYjmC,IACvE,SAAUwgB,EAAGxgB,GAAK,IAAK,IAAIyK,KAAKzK,EAAOA,EAAEijB,eAAexY,KAAI+V,EAAE/V,GAAKzK,EAAEyK,KAClE,SAAU+V,EAAGxgB,GAEhB,SAASkmC,IAAOjzC,KAAKwJ,YAAc+jB,EADnCslB,EAActlB,EAAGxgB,GAEjBwgB,EAAEtrB,UAAkB,OAAN8K,EAAa5H,OAAOo5B,OAAOxxB,IAAMkmC,EAAGhxC,UAAY8K,EAAE9K,UAAW,IAAIgxC,KAGnFpG,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAEtD,IAAIy5C,EAAan6C,EAAQ,cACrBg2C,EAAah2C,EAAQ,cACrBssC,EAAYtsC,EAAQ,oBACpBurC,EAAYvrC,EAAQ,oBACpB0yC,EAAS1yC,EAAQ,iBACjBi2C,EAAQj2C,EAAQ,gBAChBysC,EAASN,EAAansC,EAAQ,oBAQlC,SAASq2C,EAAUwE,GACf,GAAIA,EAAQ7O,MAAO,CAEf,IAAIA,EAAQ,IAAI9rC,MAAM26C,EAAQ7O,MAAMlN,SAGpC,MAFAkN,EAAM7rC,KAAO06C,EAAQ7O,MAAM7rC,KAC3B6rC,EAAMhkC,KAAO6yC,EAAQ7O,MAAMhkC,KACrBgkC,EAEV,OAAO6O,EAAQv4C,OAMnB,SAASw4C,EAAmBvN,GACxB,IAAIjrC,EAAS,GAkBb,MAhBA,CAAC,WAAY,WAAY,QAAS,SAASsrC,QAAQ,SAAUppC,GACzD,GAAwB,MAApB+oC,EAAY/oC,GAAhB,CAGA,IAAI9D,EAAQ6qC,EAAU6K,cAAc7K,EAAU4K,QAAQ5I,EAAY/oC,KACtD,aAARA,IACAA,EAAM,OAEVlC,EAAOkC,GAAO9D,KAElB,CAAC,OAAQ,KAAM,QAAQktC,QAAQ,SAAUppC,GACb,MAApB+oC,EAAY/oC,KAGhBlC,EAAOkC,GAAO+mC,EAAU4K,QAAQ5I,EAAY/oC,OAEzClC,EAGX,SAASy4C,EAAar6C,GAClB,OAAIA,EACOA,EAAMyqC,cAEVzqC,EALX3B,EAAQ+7C,mBAAqBA,EAO7B,IAAIE,EAA+B,WAE/B,SAASA,EAAcjN,EAAUW,GAC7BjC,EAAOuD,SAAS1wC,KAAM07C,GACtB17C,KAAKyuC,SAAWA,EAEZW,IACApvC,KAAK27C,SAAWvM,GA8ExB,OA1EAjqC,OAAOC,eAAes2C,EAAcz5C,UAAW,UAAW,CACtDmtB,IAAK,WAID,OAHKpvB,KAAK27C,UACNxO,EAAOqC,WAAW,iDAAkDrC,EAAO+N,sBAAuB,CAAEC,UAAW,YAE5Gn7C,KAAK27C,UAEhBxsB,YAAY,EACZD,cAAc,IAElBwsB,EAAcz5C,UAAUotC,WAAa,WACjC,OAAIrvC,KAAK27C,SACE/M,QAAQI,QAAQhvC,KAAK27C,UAEzB37C,KAAKyuC,SAASmN,KAAK,eAAgB,IAAI3M,KAAK,SAAU4M,GAIzD,OAHwB,IAApBA,EAAS76C,QACTmsC,EAAOqC,WAAW,cAAerC,EAAO+N,sBAAuB,CAAEC,UAAW,eAEzEnO,EAAUqC,WAAWwM,EAAS,OAG7CH,EAAcz5C,UAAU65C,WAAa,SAAUzE,GAC3C,IAAI5G,EAAQzwC,KACZ,OAAOA,KAAKqvC,aAAaJ,KAAK,SAAUG,GACpC,OAAOqB,EAAMhC,SAASqN,WAAW1M,EAASiI,MAGlDqE,EAAcz5C,UAAUguC,oBAAsB,SAAUoH,GACpD,IAAI5G,EAAQzwC,KACZ,OAAOA,KAAKqvC,aAAaJ,KAAK,SAAUG,GACpC,OAAOqB,EAAMhC,SAASwB,oBAAoBb,EAASiI,MAK3DqE,EAAcz5C,UAAU2tC,gBAAkB,SAAU3B,GAChD,IAAIwC,EAAQzwC,KAEZ,OADAiuC,EAAcuN,EAAmBvN,GAC1BjuC,KAAKqvC,aAAaJ,KAAK,SAAUG,GAEpC,OADAnB,EAAYZ,KAAO+B,EAAQvD,cACpB4E,EAAMhC,SAASmN,KAAK,sBAAuB,CAAC3N,IAAcgB,KAAK,SAAUngB,GAE5E,OAAO,IAAI8f,QAAQ,SAAUI,EAASU,IAClC,SAAS2J,IACLr5C,KAAKyuC,SAAS+C,eAAe1iB,GAAMmgB,KAAK,SAAUhB,GACzCA,GAILA,EAAY8N,KAAO,SAAU9W,GACzB,OAAOjlC,KAAKyuC,SAASuN,mBAAmBltB,EAAMmW,IAElD+J,EAAQf,IANJxJ,WAAW4U,EAAO,OAS9BA,UAKhBqC,EAAcz5C,UAAUg6C,YAAc,SAAUzc,GAC5C,IAAIiR,EAAQzwC,KACR0I,EAA8B,iBAAd,EAA0B0qC,EAAOwC,YAAYpW,GAAWA,EAC5E,OAAOx/B,KAAKqvC,aAAaJ,KAAK,SAAUG,GAEpC,OAAOqB,EAAMhC,SAASmN,KAAK,WAAY,CAACxM,EAAQvD,cAAeI,EAAU4K,QAAQnuC,QAGzFgzC,EAAcz5C,UAAUi6C,OAAS,SAAU1U,GACvC,IAAIiH,EAAWzuC,KAAKyuC,SACpB,OAAOzuC,KAAKqvC,aAAaJ,KAAK,SAAUG,GACpC,OAAOX,EAASmN,KAAK,yBAA0B,CAACxM,EAAQvD,cAAerE,EAAU,UAGlFkU,EArFuB,GAuFlCj8C,EAAQi8C,cAAgBA,EACxB,IAAIvB,EAAiC,SAAUjG,GAE3C,SAASiG,EAAgBzC,EAAK3H,GAC1B,IAAIU,EAAQzwC,KAwCZ,MAtCqB,iBAAV,GACS,OAAZ+vC,GAAoB8K,EAAW/K,WAAW4H,KAC1C3H,EAAU2H,EACVA,EAAM,MAGdjH,EAAQyD,EAAOnzC,KAAKf,KAAM+vC,IAAY/vC,KACtCmtC,EAAOuD,SAASD,EAAO0J,GAElBzC,IACDA,EAAM,yBAGNjH,EAAM0L,WADW,iBAAV,EACY,CACfzE,IAAKA,GAIUA,EAGlBjH,EAAMV,UACPU,EAAMgJ,MAAQ,IAAI7K,QAAQ,SAAUI,EAASU,GACzCjL,WAAW,WACPgM,EAAMmL,KAAK,cAAe,IAAI3M,KAAK,SAAUjsC,GACzC,IAAI6sC,EAAUxuC,SAAS2B,GACnB+sC,EAAU8K,EAAW/K,WAAWD,GACpC,GAAIE,EACA,OAAOf,EAAQe,GAEnBf,EAAQ,CACJltC,KAAM,SACN+tC,QAASA,WAMtBY,EAsGX,OAhJAqC,EAAUqH,EAAiBjG,GA4C3BiG,EAAgBl4C,UAAUg5C,UAAY,SAAU7L,GAC5C,OAAO,IAAIsM,EAAc17C,KAAMovC,IAEnC+K,EAAgBl4C,UAAUm5C,aAAe,WACrC,OAAOp7C,KAAK47C,KAAK,eAAgB,IAAI3M,KAAK,SAAU4M,GAChD,OAAOA,EAAS9yB,IAAI,SAAUtoB,GAAK,OAAOusC,EAAUqC,WAAW5uC,QAGvE05C,EAAgBl4C,UAAU25C,KAAO,SAAU/b,EAAQkO,GAC/C,IAAIqO,EAAU,CACVvc,OAAQA,EACRkO,OAAQA,EACRsO,GAAI,GACJlF,QAAS,OAEb,OAAOR,EAAMgB,UAAU33C,KAAKm8C,WAAYtxB,KAAKosB,UAAUmF,GAAUrF,IAErEoD,EAAgBl4C,UAAUw1C,QAAU,SAAU5X,EAAQkO,GAClD,OAAQlO,GACJ,IAAK,iBACD,OAAO7/B,KAAK47C,KAAK,kBAAmB,IACxC,IAAK,cACD,OAAO57C,KAAK47C,KAAK,eAAgB,IACrC,IAAK,aACD,OAAO57C,KAAK47C,KAAK,iBAAkB,CAACH,EAAa1N,EAAOqB,SAAUrB,EAAOsJ,WAC7E,IAAK,sBACD,OAAOr3C,KAAK47C,KAAK,0BAA2B,CAACH,EAAa1N,EAAOqB,SAAUrB,EAAOsJ,WACtF,IAAK,UACD,OAAOr3C,KAAK47C,KAAK,cAAe,CAACH,EAAa1N,EAAOqB,SAAUrB,EAAOsJ,WAC1E,IAAK,eACD,OAAOr3C,KAAK47C,KAAK,mBAAoB,CAACH,EAAa1N,EAAOqB,SAAUrB,EAAO6J,SAAU7J,EAAOsJ,WAChG,IAAK,kBACD,OAAOr3C,KAAK47C,KAAK,yBAA0B,CAAC7N,EAAOqC,oBACvD,IAAK,WACD,OAAIrC,EAAOsJ,SACAr3C,KAAK47C,KAAK,uBAAwB,CAAC7N,EAAOsJ,UAAU,IAEtDtJ,EAAOwD,UACLvxC,KAAK47C,KAAK,qBAAsB,CAAC7N,EAAOwD,WAAW,IAEvD3C,QAAQc,OAAO,IAAI9uC,MAAM,oCACpC,IAAK,iBACD,OAAOZ,KAAK47C,KAAK,2BAA4B,CAAC7N,EAAO0D,kBACzD,IAAK,wBACD,OAAOzxC,KAAK47C,KAAK,4BAA6B,CAAC7N,EAAO0D,kBAC1D,IAAK,OACD,OAAOzxC,KAAK47C,KAAK,WAAY,CAACJ,EAAmBzN,EAAOE,aAAc,WAC1E,IAAK,cACD,OAAOjuC,KAAK47C,KAAK,kBAAmB,CAACJ,EAAmBzN,EAAOE,eACnE,IAAK,UAID,OAHIF,EAAO8J,QAAmC,MAAzB9J,EAAO8J,OAAOzI,UAC/BrB,EAAO8J,OAAOzI,QAAUqM,EAAa1N,EAAO8J,OAAOzI,UAEhDpvC,KAAK47C,KAAK,cAAe,CAAC7N,EAAO8J,SAKhD,OADA1K,EAAOqC,WAAW3P,EAAS,mBAAoBsN,EAAOmP,gBAAiB,CAAEnB,UAAWtb,IAC7E,MAEXsa,EAAgBl4C,UAAU+4C,cAAgB,WACtC,GAA2B,MAAvBh7C,KAAKu8C,eAAT,CAGA,IAAIx8C,EAAOC,KACPw8C,EAAgBx8C,KAAK47C,KAAK,kCAAmC,KACjE57C,KAAKu8C,eAAiBC,GACRvN,KAAK,SAAUwN,GA2BzB,OA1BA,SAASC,IACL38C,EAAK67C,KAAK,uBAAwB,CAACa,IAAWxN,KAAK,SAAU0N,GACzD,GAAI58C,EAAKw8C,gBAAkBC,EACvB,OAAO,KAEX,IAAIrE,EAAMvJ,QAAQI,UASlB,OARA2N,EAAOrO,QAAQ,SAAUxf,GACrB/uB,EAAK68C,SAAS,KAAO9tB,EAAK+c,eAAiB,UAC3CsM,EAAMA,EAAIlJ,KAAK,WACX,OAAOlvC,EAAKyxC,eAAe1iB,GAAMmgB,KAAK,SAAUiD,GAC5CnyC,EAAKmmC,KAAK,UAAWgM,SAI1BiG,EAAIlJ,KAAK,WACZ,OAzQThK,EAyQsB,IAxQ1B,IAAI2J,QAAQ,SAAUI,GACzBvK,WAAW,WACPuK,KACD/J,KAJX,IAAeA,MA2QIgK,KAAK,WACAlvC,EAAKw8C,gBAAkBC,EAI3B/X,WAAW,WAAciY,KAAW,GAHhC38C,EAAK67C,KAAK,sBAAuB,CAACa,MAM9CC,GACOD,MAGftC,EAAgBl4C,UAAU46C,aAAe,WACrC78C,KAAKu8C,eAAiB,MAEnBpC,EAjJyB,CAkJlCzD,EAAWqC,UACbt5C,EAAQ06C,gBAAkBA,GAExB,CAAC/H,mBAAmB,GAAGkE,mBAAmB,GAAGhE,kBAAkB,GAAGkE,gBAAgB,GAAGwC,eAAe,GAAGqC,aAAa,GAAGpC,aAAa,KAAK6D,GAAG,CAAC,SAASp8C,EAAQhB,EAAOD,GACvK,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI+rC,EAASN,EAAansC,EAAQ,oBAElCjB,EAAQ25C,SAAW,CACf2D,YAAe,CACXlN,QAAW,EACX/tC,KAAQ,eAEZk7C,UAAa,CACTnN,QAAW,EACXyJ,WAAc,6CACdx3C,KAAQ,aAEZm7C,QAAW,CACPpN,QAAW,EACXyJ,WAAc,6CACdx3C,KAAQ,aAEZo7C,OAAU,CACNrN,QAAW,EACX/tC,KAAQ,UAEZq7C,QAAW,CACPtN,QAAW,EACXyJ,WAAc,6CACdx3C,KAAQ,WAEZs7C,QAAW,CACPvN,QAAW,EACXyJ,WAAc,6CACdx3C,KAAQ,WAEZu7C,QAAW,CACPxN,QAAW,EACX/tC,KAAQ,WAEZw7C,MAAS,CACLzN,QAAW,GACX/tC,KAAQ,SAEZy7C,QAAW,CACP1N,QAAW,GACX/tC,KAAQ,YA0ChBrC,EAAQqwC,WA/BR,SAAoBC,GAEhB,IAAKA,EACD,OAAO,KAEX,GAAyB,iBAAd,EAAwB,CAC/B,IAAK,IAAI7qC,KAAOzF,EAAQ25C,SAAU,CAC9B,IAAIh5C,EAAIX,EAAQ25C,SAASl0C,GACzB,GAAI9E,EAAEyvC,UAAYE,EACd,OAAO3vC,EAGf,OAAO,KAEX,GAAyB,iBAAd,EACP,OAAOX,EAAQ25C,SAASrJ,IAAY,KAExC,IAAIyN,EAAa/9C,EAAQ25C,SAASrJ,EAAQjuC,MAE1C,OAAK07C,GAOkB,GAAnBzN,EAAQF,SAAgBE,EAAQF,UAAY2N,EAAW3N,SACvD1C,EAAOqC,WAAW,2BAA4BrC,EAAOiH,iBAAkB,CAAEtyC,KAAM,UAAWV,MAAO2uC,IAE9FyN,IAT8B,iBAArBzN,EAAe,SACvB5C,EAAOqC,WAAW,0BAA2BrC,EAAOiH,iBAAkB,CAAEtyC,KAAM,UAAWV,MAAO2uC,IAE7FA,KAUb,CAACuC,kBAAkB,KAAKmL,GAAG,CAAC,SAAS/8C,EAAQhB,EAAOD,GACtD,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAEtD,IAAI4rC,EAAYtsC,EAAQ,oBACpBusC,EAAcvsC,EAAQ,sBACtBurC,EAAYvrC,EAAQ,oBACpB0yC,EAAS1yC,EAAQ,iBACjBg9C,EAAQh9C,EAAQ,gBAChBi9C,EAAaj9C,EAAQ,qBACrBm6C,EAAan6C,EAAQ,cACrBwsC,EAAexsC,EAAQ,uBACvBysC,EAASN,EAAansC,EAAQ,oBAWlC,SAAS24C,EAAMuE,EAAQzP,GACnB,IAAInrC,EAAS,GACb,IAAK,IAAIkC,KAAO04C,EACZ,IACI,IAAIx8C,EAAQw8C,EAAO14C,GAAKipC,EAAOjpC,SACjBsqB,IAAVpuB,IACA4B,EAAOkC,GAAO9D,GAGtB,MAAOsrC,GAGH,MAFAA,EAAMmR,SAAW34C,EACjBwnC,EAAMoR,WAAa3P,EAAOjpC,GACpBwnC,EAGd,OAAO1pC,EAEX,SAAS+6C,EAAU1E,EAAO2E,GACtB,OAAO,SAAW58C,GACd,OAAa,MAATA,EACO48C,EAEJ3E,EAAMj4C,IAWrB,SAAS68C,EAAQ5E,GACb,OAAO,SAAWxY,GACd,IAAK7+B,MAAME,QAAQ2+B,GACf,MAAM,IAAIjgC,MAAM,gBAEpB,IAAIoC,EAAS,GAIb,OAHA69B,EAAMyN,QAAQ,SAAUltC,GACpB4B,EAAOI,KAAKi2C,EAAMj4C,MAEf4B,GAGf,SAASk7C,EAAUpvB,GACf,MAAsB,iBAAX,GAAuBmd,EAAUkI,YAAYrlB,EAAM,IACnDA,GAEXqe,EAAOqC,WAAW,eAAgBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,OAAQL,MAAO0tB,IAC1E,MAEX,SAASqvB,EAAYz0C,GACjB,OAAOujC,EAAYmJ,aAAa1sC,GAAQiE,WAyB5C,SAASywC,EAAaC,GAClB,IAAKpS,EAAUkI,YAAYkK,GACvB,MAAM,IAAIz9C,MAAM,mBAEpB,KAAOy9C,EAAQr9C,OAAS,IACpBq9C,EAAU,MAAQA,EAAQ5K,UAAU,GAExC,OAAO4K,EAQX,SAASC,EAAcjH,GACnB,GAAgB,MAAZA,EACA,MAAO,SAEX,GAAiB,aAAbA,EACA,MAAO,MAEX,GAAiB,WAAbA,GAAsC,YAAbA,EACzB,OAAOA,EAEX,GAA0B,iBAAf,EACP,OAAOpL,EAAU6K,cAAc7K,EAAU4K,QAAQQ,IAErD,GAAIpL,EAAUkI,YAAYkD,GACtB,OAAOpL,EAAU6K,cAAcO,GAEnC,MAAM,IAAIz2C,MAAM,oBAEpB,IAAI29C,EAAc,CACdzvB,KAAMovB,EACNM,WAAYN,EACZx0C,OAAQy0C,EACRrF,UAAWqF,EACXrtB,MAAOitB,EAAU9R,EAAU4K,SAC3B4H,WA7DJ,SAAyBr9C,GACrB,IAAIwC,EAAIqpC,EAAYmJ,aAAah1C,GACjC,IACI,OAAOwC,EAAE+J,WAEb,MAAO++B,IACP,OAAO,MAwDPY,SAAUL,EAAYmJ,aACtBsI,QAASzR,EAAYmJ,aACrBuI,MAAO3R,EAAUqC,WACjBuP,UAAW3S,EAAU4K,QAErBgI,aAAcd,EAAUE,EAAQC,KAEpC,SAASY,EAAWx4C,GAIhB,OAHoB,MAAhBA,EAAMy4C,QAAiC,MAAfz4C,EAAMq4C,QAC9Br4C,EAAMq4C,MAAQr4C,EAAMy4C,QAEjB1F,EAAMkF,EAAaj4C,GAE9B,IAAI04C,EAAoB,CACpBlwB,KAAMovB,EACN3M,UAAWwM,EAAUG,EAAW,MAChCe,YAAalB,EAAUI,EAAa,MACpCe,iBAAkBnB,EAAUI,EAAa,MACzC9Q,KAAML,EAAUqC,WAChB9B,SAAUN,EAAYmJ,aACtB9I,SAAUL,EAAYmJ,aACtB5I,GAAIuQ,EAAU/Q,EAAUqC,WAAY,MACpCjuC,MAAO6rC,EAAYmJ,aACnBtlB,MAAOqtB,EACPz1C,KAAMujC,EAAU4K,QAChBx2C,EAAG09C,EAAUK,GACb99C,EAAGy9C,EAAUK,GACbx6C,EAAGm6C,EAAUI,GACb1F,QAASsF,EAAU/Q,EAAUqC,WAAY,MACzC8P,IAAKpB,EAAU9R,EAAU4K,UAE7B,SAAS+B,EAAyB3K,GAkB9B,GAhBuB,MAAnBA,EAAYmR,KAAuC,MAAxBnR,EAAYX,WACvCW,EAAYX,SAAWW,EAAYmR,KAInCnR,EAAYT,IAAMP,EAAYmJ,aAAanI,EAAYT,IAAIhgC,WAC3DygC,EAAYT,GAAK,8CAGI,MAArBS,EAAYvtB,OAAqC,MAApButB,EAAYvlC,OACzCulC,EAAYvlC,KAAOulC,EAAYvtB,OAGb,MAAlButB,EAAYT,IAAqC,MAAvBS,EAAYwK,UACtCxK,EAAYwK,QAAUzL,EAAUmF,mBAAmBlE,KAElDA,EAAYkR,KAETlR,EAAYrqC,GAAKqqC,EAAY5tC,GAAK4tC,EAAY3tC,EAAG,CACjD,IAAI6+C,EAAM,CACNlT,EAAUoT,WAAWpT,EAAU4K,QAAQ5I,EAAYnd,QACnDmb,EAAUoT,WAAWpT,EAAU4K,QAAQ5I,EAAYV,WACnDtB,EAAUoT,WAAWpT,EAAU4K,QAAQ5I,EAAYX,WAClDW,EAAYT,IAAM,KACnBvB,EAAUoT,WAAWpT,EAAU4K,QAAQ5I,EAAY7sC,OAAS,OAC5D6qC,EAAU4K,QAAQ5I,EAAYvlC,MAAQ,MACtCujC,EAAUoT,WAAWpT,EAAU4K,QAAQ5I,EAAYrqC,GAAK,OACxDqoC,EAAUoT,WAAWpT,EAAU4K,QAAQ5I,EAAY5tC,IACnD4rC,EAAUoT,WAAWpT,EAAU4K,QAAQ5I,EAAY3tC,KAEvD2tC,EAAYkR,IAAMzB,EAAMz3B,OAAOk5B,GAGvC,IAAIn8C,EAASq2C,EAAM2F,EAAmB/Q,GAClCqR,EAAYrR,EAAYqR,UAmB5B,OAlBIrT,EAAUkI,YAAYmL,KACtBA,EAAYrS,EAAYmJ,aAAakJ,GAAW3xC,YAEzB,iBAAhB,GAAwC,MAAZ3K,EAAOY,KAC1C07C,GAAat8C,EAAOY,EAAI,IAAM,GACd,IACZ07C,EAAY,GAEhBA,EAAYj+C,SAASi+C,IAEE,iBAAhB,IACPA,EAAY,GAEhBt8C,EAAOs8C,UAAYA,EAEft8C,EAAOuuC,WAAoD,MAAvCvuC,EAAOuuC,UAAUlmC,QAAQ,KAAM,MACnDrI,EAAOuuC,UAAY,MAEhBvuC,EAEXvD,EAAQm5C,yBAA2BA,EACnC,IAAI2G,EAA2B,CAC3BlS,KAAM0Q,EAAU/Q,EAAUqC,YAC1Bve,MAAOitB,EAAUI,GACjB7Q,SAAUyQ,EAAU9Q,EAAYmJ,cAChC7I,SAAUwQ,EAAU9Q,EAAYmJ,cAChC5I,GAAIuQ,EAAU/Q,EAAUqC,YACxBjuC,MAAO28C,EAAU9Q,EAAYmJ,cAC7B1tC,KAAMq1C,EAAU9R,EAAU4K,UAE9B,SAAS2I,EAAwBvR,GAC7B,OAAOoL,EAAMkG,EAA0BtR,GAE3C,IAAIwR,EAA8B,CAC9BC,oBAAqB3B,EAAUI,GAC/Be,iBAAkBf,EAClBc,YAAad,EACb1M,gBAAiByM,EACjB9O,QAASpC,EAAUqC,WACnB+B,OAAQ6M,EAAQC,GAChBx1C,KAAMujC,EAAU4K,QAChB8I,SAAUxB,EACV5M,UAAW2M,GAKf,IAAI0B,EAA2B,CAC3BlH,gBAAiBqF,EAAU/Q,EAAUqC,WAAY,MACjD6P,iBAAkBf,EAClBj9C,KAAM68C,EAAUG,GAChBQ,QAASzR,EAAYmJ,aACrByJ,UAAW9B,EAAU9R,EAAU4K,SAC/BtF,UAAW2M,EACXzM,gBAAiByM,EACjBjG,KAAMgG,EAXV,SAAoCpqB,GAChC,OAAOwlB,EAAMoG,EAA6B5rB,KAW1CorB,YAAad,EACb2B,kBAAmB7S,EAAYmJ,aAC/BY,OAAQ+G,EAAUI,IA2BtB,IAAI4B,EAAe,CACfjI,UAAWiG,EAAUO,OAAe9uB,GACpCuoB,QAASgG,EAAUO,OAAe9uB,GAClC4f,QAAS2O,EAAU/Q,EAAUqC,gBAAY7f,GACzC4hB,OAAQ2M,EAfZ,SAASiC,EAAY5O,GASjB,OARIpvC,MAAME,QAAQkvC,GACdA,EAAO9C,QAAQ,SAAU2R,GACrBD,EAAYC,KAGD,MAAV7O,GACL8M,EAAU9M,GAEPA,QAMwB5hB,IAKnC,IA/PsB6pB,EAAO6G,EA+PzBC,EAAY,CACZlB,YAAalB,EAAUI,GACvB5M,UAAWwM,EAAUG,GACrBgB,iBAAkBf,EAClBiC,QAASrC,EA5Nb,SAAsB38C,GAClB,GAAuB,kBAAZ,EACP,OAAOA,EAEX,GAAuB,iBAAZ,EAAsB,CAC7B,GAAc,SAAVA,EACA,OAAO,EAEX,GAAc,UAAVA,EACA,OAAO,EAGf,MAAM,IAAIR,MAAM,oBAAsBQ,KAiNtCguC,QAASpC,EAAUqC,WACnB3mC,MArQkB2wC,EAqQCpN,EAAU4K,QArQJqJ,EAqQa,KApQ/B,SAAW9+C,GACd,OAAKA,EAGEi4C,EAAMj4C,GAFF8+C,IAmQf9O,OAAQ6M,EAAQC,GAChBzM,gBAAiByM,EACjByB,SAAUxB,GAEd,SAASkC,EAASxsB,GACd,OAAOwlB,EAAM8G,EAAWtsB,GAE5B,SAASysB,EAAaC,EAAeC,GACjC,OAAO,IAAI5R,QAAQ,SAAUI,EAASU,GAClC,IAAI+Q,EAAU,GACd,SAASpH,IACLmH,IAAcvR,KAAK,SAAUjsC,GAEzB,GAAIA,GAAUu9C,IACVvR,EAAQhsC,OAGP,CACDy9C,IACA,IAAIxb,EAAU,IAAM,IAAMx6B,KAAKi2C,MAAMj2C,KAAK4/B,UAAY,GAAKoW,IAC7C,IAAVxb,IACAA,EAAU,KAEdR,WAAW4U,EAAOpU,KAEvB,SAAUyH,GACTgD,EAAOhD,KAGf2M,KAKR,SAASsH,EAAQxS,EAAQyS,GACrB,GAAI5+C,MAAME,QAAQisC,GAAS,CACvB,IAAInrC,EAAS,GAIb,OAHAmrC,EAAOG,QAAQ,SAAUH,GACrBnrC,EAAOI,KAAKu9C,EAAQxS,EAAQyS,MAEzB59C,EAEX,OAAO49C,EAAYzS,GAEvB,SAAS0S,EAAe1S,GACpB,IACI,MAAO,WAAanB,EAAUqC,WAAWlB,GAE7C,MAAOzB,IACP,GAAe,UAAXyB,EACA,MAAO,QAEN,GAAe,YAAXA,EACL,MAAO,UAEN,GAAIlC,EAAUkI,YAAYhG,IAC3B,GAAsB,KAAlBA,EAAOntC,OACP,MAAO,MAAQmtC,OAGlB,GAAInsC,MAAME,QAAQisC,GAAS,CAC5BA,EAASwS,EAAQxS,EAAQ,SAAUA,GAI/B,OAHc,MAAVA,IACAA,EAAS,MAENA,IAEX,IACI,MAAO,SAAWuP,EAAMz3B,OAAOkoB,GAEnC,MAAOzB,GACHC,QAAQ9Y,IAAI6Y,IAGpB,MAAM,IAAI9rC,MAAM,mBAAqButC,GAyCzC,IAAI4K,EAA0B,WAM1B,SAASA,EAAShJ,GACd5C,EAAOuD,SAAS1wC,KAAM+4C,IACtBhJ,EAAU8K,EAAW/K,WAAWC,KAE5B/vC,KAAK8gD,SAAW/Q,EAEhB/vC,KAAKy5C,MAAQ7K,QAAQI,QAAQhvC,KAAK8gD,WAIlC9gD,KAAKy5C,MAAQ,IAAI7K,QAAQ,SAAUI,EAASU,MAEhD1vC,KAAK+gD,kBAAoB,EAEzB/gD,KAAKghD,UAAY,GAEjBhhD,KAAKihD,QAAU,GACfjhD,KAAKkhD,iBAAmB,IAKxBlhD,KAAK48C,SAAW,CAAEt2C,MAAOtG,KAAK+gD,kBAinBlC,OA/mBAhI,EAAS92C,UAAUk/C,QAAU,WACzB,IAAI1Q,EAAQzwC,KACZA,KAAKohD,iBAAiBnS,KAAK,SAAUgQ,GAEjC,GAAIA,IAAgBxO,EAAMsQ,iBAA1B,EAGgC,IAA5BtQ,EAAMsQ,mBACNtQ,EAAMsQ,iBAAmB9B,EAAc,GAG3C,IAAK,IAAIt+C,EAAI8vC,EAAMsQ,iBAAmB,EAAGpgD,GAAKs+C,EAAat+C,IACnD8vC,EAAMmM,SAASt2C,MAAQ3F,IACvB8vC,EAAMmM,SAASt2C,MAAQ3F,EAGvBwE,OAAO0rC,KAAKJ,EAAMmM,UAAUtO,QAAQ,SAAUppC,GAC9B,UAARA,GAGAurC,EAAMmM,SAAS13C,GAAOvE,EAAI,WACnB8vC,EAAMmM,SAAS13C,MAIlCurC,EAAMvK,KAAK,QAASvlC,GAGxB,IAAI0gD,EAAc,GAElBl8C,OAAO0rC,KAAKJ,EAAMwQ,SAAS3S,QAAQ,SAAU0C,GACzC,IAAIK,EApGpB,SAA0BiQ,GACtB,GAA+B,QAA3BA,EAAO7N,UAAU,EAAG,GACpB,MAAO,CAAEvwB,KAAM,cAAe4L,KAAMwyB,EAAO7N,UAAU,IAEpD,GAAe,UAAX6N,EACL,MAAO,CAAEp+B,KAAM,SAEd,GAAe,YAAXo+B,EACL,MAAO,CAAEp+B,KAAM,WAEd,GAA+B,aAA3Bo+B,EAAO7N,UAAU,EAAG,GACzB,MAAO,CAAEvwB,KAAM,UAAWksB,QAASkS,EAAO7N,UAAU,IAEnD,GAA+B,WAA3B6N,EAAO7N,UAAU,EAAG,GACzB,IACI,IAAItF,EAASuP,EAAMxR,OAAOoV,EAAO7N,UAAU,IAO3C,MAAO,CAAEvwB,KAAM,QAAS+8B,MANxB9R,EAASwS,EAAQxS,EAAQ,SAAUA,GAI/B,MAHe,OAAXA,IACAA,EAAS,MAENA,KAIf,MAAOzB,GACHC,QAAQ9Y,IAAI6Y,GAGpB,MAAM,IAAI9rC,MAAM,wBAwEQ2gD,CAAiBvQ,GACV,gBAAfK,EAAMnuB,KACNutB,EAAMe,eAAeH,EAAMviB,MAAMmgB,KAAK,SAAUhB,GACvCA,GAA0C,MAA3BA,EAAYgR,cAGhCxO,EAAMmM,SAAS,KAAO3O,EAAYnf,KAAK+c,eAAiBoC,EAAYgR,YACpExO,EAAMvK,KAAKmL,EAAMviB,KAAMmf,MAGP,YAAfoD,EAAMnuB,MACPutB,EAAMuQ,UAAU3P,EAAMjC,WACtBiS,EAAYhQ,EAAMjC,SAAWqB,EAAMuQ,UAAU3P,EAAMjC,UAEvDqB,EAAMqL,WAAWzK,EAAMjC,QAAS,UAAUH,KAAK,SAAUuS,GACrD,IAAIC,EAAczhD,KAAKghD,UAAU3P,EAAMjC,SACnCqS,GAAeD,EAAQ9jC,GAAG+jC,KAG9BzhD,KAAKghD,UAAU3P,EAAMjC,SAAWoS,EAChCxhD,KAAKkmC,KAAKmL,EAAMjC,QAASoS,OAGT,UAAfnQ,EAAMnuB,MACXutB,EAAMiR,QAAQ,CACV5J,UAAWrH,EAAMsQ,iBAAmB,EACpChJ,QAASkH,EACT7N,OAAQC,EAAM4O,QACfhR,KAAK,SAAUgJ,GACM,IAAhBA,EAAKj3C,QAGTi3C,EAAK3J,QAAQ,SAAUza,GACnB4c,EAAMmM,SAAS,KAAO/oB,EAAI0d,UAAU1F,eAAiBhY,EAAIorB,YACzDxO,EAAMmM,SAAS,KAAO/oB,EAAI4d,gBAAgB5F,eAAiBhY,EAAIorB,YAC/DxO,EAAMvK,KAAKmL,EAAM4O,MAAOpsB,SAKxC4c,EAAMsQ,iBAAmB9B,EACzBxO,EAAMuQ,UAAYK,KAEtBrhD,KAAK2hD,UAET5I,EAAS92C,UAAU2/C,iBAAmB,SAAU3C,GAC5Cj/C,KAAK+gD,iBAAmB/gD,KAAKi/C,YAC7Bj/C,KAAKmhD,WAETh8C,OAAOC,eAAe2zC,EAAS92C,UAAW,UAAW,CACjDmtB,IAAK,WACD,OAAOpvB,KAAK8gD,UAEhB3xB,YAAY,EACZD,cAAc,IAElB6pB,EAAS92C,UAAU6tC,WAAa,WAC5B,OAAO9vC,KAAKy5C,OAEhBt0C,OAAOC,eAAe2zC,EAAS92C,UAAW,cAAe,CACrDmtB,IAAK,WACD,OAAIpvB,KAAK+gD,iBAAmB,EACjB,KAEJ/gD,KAAK+gD,kBAEhB5xB,YAAY,EACZD,cAAc,IAElB/pB,OAAOC,eAAe2zC,EAAS92C,UAAW,UAAW,CACjDmtB,IAAK,WACD,OAAwB,MAAhBpvB,KAAK6hD,SAEjBl/C,IAAK,SAAUvB,GACX,IAAIqvC,EAAQzwC,KACZykC,WAAW,WACHrjC,IAAUqvC,EAAMoR,QAChBpR,EAAMoR,QAAUC,YAAYrR,EAAM0Q,QAAQY,KAAKtR,GAAQA,EAAMuR,kBAEvD5gD,GAASqvC,EAAMoR,UACrBI,cAAcxR,EAAMoR,SACpBpR,EAAMoR,QAAU,OAErB,IAEP1yB,YAAY,EACZD,cAAc,IAElB/pB,OAAOC,eAAe2zC,EAAS92C,UAAW,kBAAmB,CACzDmtB,IAAK,WACD,OAAOpvB,KAAKkhD,kBAEhBv+C,IAAK,SAAUvB,GACX,IAAIqvC,EAAQzwC,KACZ,GAAuB,iBAAZ,GAAwBoB,GAAS,GAAKqJ,KAAKi2C,MAAMt/C,IAAUA,EAClE,MAAM,IAAIR,MAAM,4BAEpBZ,KAAKkhD,iBAAmB9/C,EACpBpB,KAAK6hD,UACLI,cAAcjiD,KAAK6hD,SACnB7hD,KAAK6hD,QAAUC,YAAY,WAAcrR,EAAM0Q,WAAcnhD,KAAKkhD,oBAG1E/xB,YAAY,EACZD,cAAc,IAIlB6pB,EAAS92C,UAAU+5C,mBAAqB,SAAUvK,EAAiBxM,GAC/D,IAAIllC,EAAOC,KACX,OAAO,IAAI4uC,QAAQ,SAAUI,EAASU,GAClC,IAAIwS,EAAQ,KACZ,SAASC,EAASlU,GACViU,GACAxd,aAAawd,GAEjBlT,EAAQf,GAEZluC,EAAKgmC,KAAK0L,EAAiB0Q,GACF,iBAAd,GAAoC,EAAVld,IACjCid,EAAQzd,WAAW,WACf1kC,EAAKimC,eAAeyL,EAAiB0Q,GACrCzS,EAAO,IAAI9uC,MAAM,aAClBqkC,OAIf8T,EAAS92C,UAAUm/C,eAAiB,WAChC,IAAI3Q,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAOwB,EAAMgH,QAAQ,iBAAkB,IAAIxI,KAAK,SAAUjsC,GACtD,IAAI5B,EAAQqJ,KAAKi2C,MAAM19C,GACvB,GAAI5B,GAAS4B,EACT,MAAM,IAAIpC,MAAM,qCAEpB,OAAOQ,OAInB23C,EAAS92C,UAAUkuC,YAAc,WAC7B,IAAIM,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAOwB,EAAMgH,QAAQ,cAAe,IAAIxI,KAAK,SAAUjsC,GACnD,OAAOiqC,EAAYmJ,aAAapzC,QAI5C+1C,EAAS92C,UAAU65C,WAAa,SAAUxL,EAAe+G,GACrD,IAAI5G,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkB,CAAEgB,cAAeA,EAAe+G,SAAUA,IAAYpI,KAAK,SAAUmT,GACvG,IAAI9R,EAAgB8R,EAAG9R,cAAe+G,EAAW+K,EAAG/K,SACpD,OAAO5G,EAAM3B,YAAYwB,GAAerB,KAAK,SAAUG,GACnD,IAAIrB,EAAS,CAAEqB,QAASA,EAASiI,SAAUiH,EAAcjH,IACzD,OAAO5G,EAAMgH,QAAQ,aAAc1J,GAAQkB,KAAK,SAAUjsC,GACtD,OAAOiqC,EAAYmJ,aAAapzC,YAMpD+1C,EAAS92C,UAAUguC,oBAAsB,SAAUK,EAAe+G,GAC9D,IAAI5G,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkB,CAAEgB,cAAeA,EAAe+G,SAAUA,IAAYpI,KAAK,SAAUmT,GACvG,IAAI9R,EAAgB8R,EAAG9R,cAAe+G,EAAW+K,EAAG/K,SACpD,OAAO5G,EAAM3B,YAAYwB,GAAerB,KAAK,SAAUG,GACnD,IAAIrB,EAAS,CAAEqB,QAASA,EAASiI,SAAUiH,EAAcjH,IACzD,OAAO5G,EAAMgH,QAAQ,sBAAuB1J,GAAQkB,KAAK,SAAUjsC,GAC/D,IAAI5B,EAAQC,SAAS2B,GACrB,GAAI5B,GAAS4B,EACT,MAAM,IAAIpC,MAAM,0CAEpB,OAAOQ,WAM3B23C,EAAS92C,UAAUogD,QAAU,SAAU/R,EAAe+G,GAClD,IAAI5G,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkB,CAAEgB,cAAeA,EAAe+G,SAAUA,IAAYpI,KAAK,SAAUmT,GACvG,IAAI9R,EAAgB8R,EAAG9R,cAAe+G,EAAW+K,EAAG/K,SACpD,OAAO5G,EAAM3B,YAAYwB,GAAerB,KAAK,SAAUG,GACnD,IAAIrB,EAAS,CAAEqB,QAASA,EAASiI,SAAUiH,EAAcjH,IACzD,OAAO5G,EAAMgH,QAAQ,UAAW1J,GAAQkB,KAAK,SAAUjsC,GACnD,OAAOipC,EAAU4K,QAAQ7zC,YAM7C+1C,EAAS92C,UAAUqgD,aAAe,SAAUhS,EAAesH,EAAUP,GACjE,IAAI5G,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkB,CAAEgB,cAAeA,EAAesH,SAAUA,EAAUP,SAAUA,IAAYpI,KAAK,SAAUmT,GAC3H,IAAI9R,EAAgB8R,EAAG9R,cAAesH,EAAWwK,EAAGxK,SAAUP,EAAW+K,EAAG/K,SAC5E,OAAO5G,EAAM3B,YAAYwB,GAAerB,KAAK,SAAUG,GACnD,IAAIrB,EAAS,CACTqB,QAASA,EACTiI,SAAUiH,EAAcjH,GACxBO,SAAU3L,EAAU6K,cAAc7K,EAAU4K,QAAQe,KAExD,OAAOnH,EAAMgH,QAAQ,eAAgB1J,GAAQkB,KAAK,SAAUjsC,GACxD,OAAOipC,EAAU4K,QAAQ7zC,YAQ7C+1C,EAAS92C,UAAU2tC,gBAAkB,SAAUQ,GAC3C,IAAIK,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkB,CAAEc,kBAAmBA,IAAqBnB,KAAK,SAAUmT,GAC3F,IAAIhS,EAAoBgS,EAAGhS,kBACvBrC,EAAS,CAAEqC,kBAAmBnE,EAAU4K,QAAQzG,IACpD,OAAOK,EAAMgH,QAAQ,kBAAmB1J,GAAQkB,KAAK,SAAUjsC,GAE3D,GAAsB,MADtBA,EAASipC,EAAU4K,QAAQ7zC,IAChBhC,OACP,MAAM,IAAIJ,MAAM,sCAEpB,OAAOoC,SAKvB+1C,EAAS92C,UAAUlB,KAAO,SAAUktC,GAChC,IAAIwC,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkBrB,GAAagB,KAAK,SAAUhB,GAC9D,OAAOwC,EAAM8R,cAActU,EAAa,CAAC,KAAM,SAASgB,KAAK,SAAUhB,GACnE,IAAIF,EAAS,CAAEE,YAAauR,EAAwBvR,IACpD,OAAOwC,EAAMgH,QAAQ,OAAQ1J,GAAQkB,KAAK,SAAUjsC,GAChD,OAAOipC,EAAU4K,QAAQ7zC,YAM7C+1C,EAAS92C,UAAU0tC,YAAc,SAAU1B,GACvC,IAAIwC,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkBrB,GAAagB,KAAK,SAAUhB,GAC9D,OAAOwC,EAAM8R,cAActU,EAAa,CAAC,KAAM,SAASgB,KAAK,SAAUhB,GACnE,IAAIF,EAAS,CAAEE,YAAauR,EAAwBvR,IACpD,OAAOwC,EAAMgH,QAAQ,cAAe1J,GAAQkB,KAAK,SAAUjsC,GACvD,OAAOiqC,EAAYmJ,aAAapzC,YAMpD+1C,EAAS92C,UAAUqvC,SAAW,SAAUkR,GACpC,IAAI/R,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkB,CAAEkT,oBAAqBA,IAAuBvT,KAAK,SAAUmT,GAC/F,IAAII,EAAsBJ,EAAGI,oBAC7B,IACI,IAAIjR,EAAYtF,EAAU4K,QAAQ2L,GAClC,GAAyB,KAArBjR,EAAUvwC,OACV,OAAOs/C,EAAa,WAChB,OAA0D,MAAlD7P,EAAMmM,SAAS,KAAOrL,EAAU1F,gBACzC,WACC,OAAO4E,EAAMgH,QAAQ,WAAY,CAAElG,UAAWA,IAAatC,KAAK,SAAU3oC,GACtE,OAAa,MAATA,EACO,KAEJw4C,EAAWx4C,OAKlC,MAAOomC,IACP,IACI,IAAI2K,EAAWiH,EAAckE,GAC7B,OAAOlC,EAAa,WAChB,OAAIrU,EAAUkI,YAAYkD,IACJh2C,SAASg2C,EAAS5D,UAAU,GAAI,IAC7BhD,EAAMmM,SAASt2C,OAGzC,WACC,OAAOmqC,EAAMgH,QAAQ,WAAY,CAAEJ,SAAUA,IAAYpI,KAAK,SAAU3oC,GACpE,OAAa,MAATA,EACO,KAEJw4C,EAAWx4C,OAI9B,MAAOomC,IACP,MAAM,IAAI9rC,MAAM,wCAI5Bm4C,EAAS92C,UAAUuvC,eAAiB,SAAUC,GAC1C,IAAIhB,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkB,CAAEmC,gBAAiBA,IAAmBxC,KAAK,SAAUmT,GACvF,IAAI3Q,EAAkB2Q,EAAG3Q,gBACrB1D,EAAS,CAAE0D,gBAAiByM,EAAUzM,IAC1C,OAAO6O,EAAa,WAChB,OAAgE,MAAxD7P,EAAMmM,SAAS,KAAOnL,EAAgB5F,gBAC/C,WACC,OAAO4E,EAAMgH,QAAQ,iBAAkB1J,GAAQkB,KAAK,SAAUjsC,GAI1D,OAHc,MAAVA,IACAA,EAAS41C,EAAyB51C,IAE/BA,WAM3B+1C,EAAS92C,UAAUyvC,sBAAwB,SAAUD,GACjD,IAAIhB,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkB,CAAEmC,gBAAiBA,IAAmBxC,KAAK,SAAUmT,GACvF,IAAI3Q,EAAkB2Q,EAAG3Q,gBACrB1D,EAAS,CAAE0D,gBAAiByM,EAAUzM,IAC1C,OAAO6O,EAAa,WAChB,OAAgE,MAAxD7P,EAAMmM,SAAS,KAAOnL,EAAgB5F,gBAC/C,WACC,OAAO4E,EAAMgH,QAAQ,wBAAyB1J,GAAQkB,KAAK,SAAUjsC,GA/hBzF,IAAiCy/C,EAGzBz/C,EAgiBgB,OAHc,MAAVA,KA7hBpBA,EAASq2C,EAAMuG,EAHU6C,EAiiB4Bz/C,IA7hBlDi1C,KAAK3J,QAAQ,SAAUoU,EAAOj9C,GACA,MAA7Bi9C,EAAMhD,sBACNgD,EAAMhD,oBAAsBj6C,KAGH,MAA7Bg9C,EAAmBzL,SACnBh0C,EAAO2/C,WAAY,GAuhBC3/C,EArhBjBA,GAuhBoBA,WAM3B+1C,EAAS92C,UAAUy/C,QAAU,SAAU7J,GACnC,IAAIpH,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAO/B,EAAaoC,kBAAkBuI,GAAQ5I,KAAK,SAAU4I,GACzD,OAAOpH,EAAM8R,cAAc1K,EAAQ,CAAC,YAAY5I,KAAK,SAAU4I,GAC3D,IA/gBCA,EA+gBG9J,EAAS,CAAE8J,QA/gBdA,EA+gBkCA,EA9gB5CwB,EAAM0G,EAAclI,KA+gBX,OAAOpH,EAAMgH,QAAQ,UAAW1J,GAAQkB,KAAK,SAAUjsC,GACnD,OAAOi7C,EAAQoC,EAARpC,CAAkBj7C,YAM7C+1C,EAAS92C,UAAU2gD,cAAgB,WAC/B,IAAInS,EAAQzwC,KACZ,OAAOA,KAAKy5C,MAAMxK,KAAK,WACnB,OAAOwB,EAAMgH,QAAQ,gBAAiB,IAAIxI,KAAK,SAAUjsC,GAErD,OAAOA,OAInB+1C,EAAS92C,UAAUsgD,cAAgB,SAAUpU,EAAQ0C,GACjD,IAAIlC,EAAW,GACX3rC,EAj0BZ,SAAoBynB,GAChB,IAAIznB,EAAS,GACb,IAAK,IAAIkC,KAAOulB,EACZznB,EAAOkC,GAAOulB,EAAIvlB,GAEtB,OAAOlC,EA4zBUorC,CAAWD,GASxB,OARA0C,EAAKvC,QAAQ,SAAUppC,QACCsqB,IAAhBxsB,EAAOkC,IAGXypC,EAASvrC,KAAKpD,KAAK8uC,YAAY9rC,EAAOkC,IAAM+pC,KAAK,SAAUG,GACvDpsC,EAAOkC,GAAOkqC,MAEnBpvC,MACI4uC,QAAQC,IAAIF,GAAUM,KAAK,WAAc,OAAOjsC,KAE3D+1C,EAAS92C,UAAU4gD,aAAe,SAAU/gD,GACxC,IAAI2uC,EAAQzwC,KAEZ,OAAOA,KAAK8vC,aAAab,KAAK,SAAUc,GAE/BA,EAAQuJ,YACTnM,EAAOqC,WAAW,2BAA4BrC,EAAO+N,sBAAuB,CAAEC,UAAW,MAAOpL,QAASA,EAAQjuC,OAGrH,IAAI4G,EAAO,aAAei1C,EAAWmF,SAAShhD,GAAM2xC,UAAU,GAC1DxF,EAAc,CAAET,GAAIuC,EAAQuJ,WAAY5wC,KAAMA,GAClD,OAAO+nC,EAAM1vC,KAAKktC,GAAagB,KAAK,SAAUvmC,GAE1C,OAAmB,IAAfA,EAAK1H,OACE,KAEJgsC,EAAUqC,WAAW,KAAO3mC,EAAK+qC,UAAU,UAI9DsF,EAAS92C,UAAU6sC,YAAc,SAAUhtC,GACvC,IAAI2uC,EAAQzwC,KAEZ,GAAI8B,aAAgB8sC,QAChB,OAAO9sC,EAAKmtC,KAAK,SAAUqB,GACvB,OAAOG,EAAM3B,YAAYwB,KAIjC,IACI,OAAO1B,QAAQI,QAAQhC,EAAUqC,WAAWvtC,IAEhD,MAAO4qC,IACP,IAAI3sC,EAAOC,KACP+iD,EAAWpF,EAAWmF,SAAShhD,GAEnC,OAAO9B,KAAK6iD,aAAa/gD,GAAMmtC,KAAK,SAAU+T,GAE1C,IACI/U,EAAc,CAAET,GAAIwV,EAAiBt6C,KAD9B,aAAeq6C,EAAStP,UAAU,IAE7C,OAAO1zC,EAAKgB,KAAKktC,KAElBgB,KAAK,SAAUvmC,GACd,GAAmB,IAAfA,EAAK1H,OACL,OAAO,KAEX,IAAIouC,EAAUpC,EAAUqC,WAAW,KAAO3mC,EAAK+qC,UAAU,KACzD,MAAgB,+CAAZrE,EACO,KAEJA,KAGf2J,EAAS92C,UAAUghD,cAAgB,SAAU7T,GACzC,IAAIqB,EAAQzwC,KACZ,GAAIovC,aAAmBR,QACnB,OAAOQ,EAAQH,KAAK,SAAUG,GAC1B,OAAOqB,EAAMwS,cAAc7T,KAInC,IAAIttC,GADJstC,EAAUpC,EAAUqC,WAAWD,IACZqE,UAAU,GAAK,gBAC9ByP,EAAWvF,EAAWmF,SAAShhD,GAC/B/B,EAAOC,KACX,OAAOA,KAAK6iD,aAAa/gD,GAAMmtC,KAAK,SAAU+T,GAC1C,IAAKA,EACD,OAAO,KAGX,IACI/U,EAAc,CAAET,GAAIwV,EAAiBt6C,KAD9B,aAAew6C,EAASzP,UAAU,IAE7C,OAAO1zC,EAAKgB,KAAKktC,KAClBgB,KAAK,SAAUvmC,GAId,IAFAA,EAAOA,EAAK+qC,UAAU,IAEbzyC,OAAS,GACd,OAAO,KAGX,IADA0H,EAAOA,EAAK+qC,UAAU,KACbzyC,OAAS,GACd,OAAO,KAEX,IAAIA,EAASisC,EAAYmJ,aAAa,KAAO1tC,EAAK+qC,UAAU,EAAG,KAAK9lC,WAEpE,GAAI,EAAI3M,GADR0H,EAAOA,EAAK+qC,UAAU,KACAzyC,OAClB,OAAO,KAEX,IAAIc,EAAOsxC,EAAO+P,aAAa,KAAOz6C,EAAK+qC,UAAU,EAAG,EAAIzyC,IAE5D,OAAOjB,EAAK+uC,YAAYhtC,GAAMmtC,KAAK,SAAUmU,GACzC,OAAIA,GAAQhU,EACD,KAEJttC,OAInBi3C,EAAS92C,UAAU0/C,OAAS,aAE5B5I,EAAS92C,UAAUw1C,QAAU,SAAU5X,EAAQkO,GAE3C,OADAZ,EAAOqC,WAAW3P,EAAS,mBAAoBsN,EAAOmP,gBAAiB,CAAEnB,UAAWtb,IAC7E,MAEXkZ,EAAS92C,UAAU+4C,cAAgB,WAC/BrO,QAAQ9Y,IAAI,2DAEhBklB,EAAS92C,UAAU46C,aAAe,aAElC9D,EAAS92C,UAAU4jC,GAAK,SAAUmL,EAAWqS,GACzC,IAAIn+C,EAAM27C,EAAe7P,GASzB,OARKhxC,KAAKihD,QAAQ/7C,KACdlF,KAAKihD,QAAQ/7C,GAAO,IAExBlF,KAAKihD,QAAQ/7C,GAAK9B,KAAK,CAAE4tC,UAAWA,EAAWqS,SAAUA,EAAUngC,KAAM,OAC7D,YAARhe,GACAlF,KAAKg7C,gBAETh7C,KAAKsjD,SAAU,EACRtjD,MAEX+4C,EAAS92C,UAAU8jC,KAAO,SAAUiL,EAAWqS,GAC3C,IAAIn+C,EAAM27C,EAAe7P,GASzB,OARKhxC,KAAKihD,QAAQ/7C,KACdlF,KAAKihD,QAAQ/7C,GAAO,IAExBlF,KAAKihD,QAAQ/7C,GAAK9B,KAAK,CAAE4tC,UAAWA,EAAWqS,SAAUA,EAAUngC,KAAM,SAC7D,YAARhe,GACAlF,KAAKg7C,gBAETh7C,KAAKsjD,SAAU,EACRtjD,MAEX+4C,EAAS92C,UAAUikC,KAAO,SAAU8K,GAEhC,IADA,IAAIxL,EAAO,GACFwI,EAAK,EAAGA,EAAKxmB,UAAUxmB,OAAQgtC,IACpCxI,EAAKwI,EAAK,GAAKxmB,UAAUwmB,GAE7B,IAAIhrC,GAAS,EACTkC,EAAM27C,EAAe7P,GAErB3K,EAAYrmC,KAAKihD,QAAQ/7C,GAC7B,IAAKmhC,EACD,OAAOrjC,EAEX,IAAK,IAAIrC,EAAI,EAAGA,EAAI0lC,EAAUrlC,OAAQL,IAAK,CACvC,IAAI0iD,EAAWhd,EAAU1lC,GACH,SAAlB0iD,EAASngC,OACTmjB,EAAUkd,OAAO5iD,EAAG,GACpBA,KAEJ,IACI0iD,EAASA,SAAS57B,MAAMznB,KAAMwlC,GAC9BxiC,GAAS,EAEb,MAAO0pC,GACHC,QAAQ9Y,IAAI,yBAA2B6Y,EAAMlN,UAYrD,OATyB,IAArB6G,EAAUrlC,gBACHhB,KAAKihD,QAAQ/7C,GACR,YAARA,GACAlF,KAAK68C,gBAGgB,IAAzB78C,KAAKwjD,kBACLxjD,KAAKsjD,SAAU,GAEZtgD,GAGX+1C,EAAS92C,UAAUuhD,cAAgB,SAAUxS,GACzC,IAAKA,EAAW,CACZ,IAAIhuC,EAAS,EACb,IAAK,IAAIkC,KAAOlF,KAAKihD,QACjBj+C,GAAUhD,KAAKihD,QAAQ/7C,GAAKlE,OAEhC,OAAOgC,EAEX,IAAIqjC,EAAYrmC,KAAKihD,QAAQJ,EAAe7P,IAC5C,OAAK3K,EAGEA,EAAUrlC,OAFN,GAKf+3C,EAAS92C,UAAUokC,UAAY,SAAU2K,GACrC,IAAI3K,EAAYrmC,KAAKihD,QAAQJ,EAAe7P,IAC5C,IAAK3K,EACD,MAAO,GAGX,IADA,IAAIrjC,EAAS,GACJrC,EAAI,EAAGA,EAAI0lC,EAAUrlC,OAAQL,IAClCqC,EAAOI,KAAKijC,EAAU1lC,GAAG0iD,UAE7B,OAAOrgD,GAEX+1C,EAAS92C,UAAUgkC,mBAAqB,SAAU+K,GAK9C,cAJOhxC,KAAKihD,QAAQJ,EAAe7P,IACN,IAAzBhxC,KAAKwjD,kBACLxjD,KAAKsjD,SAAU,GAEZtjD,MAEX+4C,EAAS92C,UAAU+jC,eAAiB,SAAUgL,EAAWqS,GACrD,IAAII,EAAkB5C,EAAe7P,GACjC3K,EAAYrmC,KAAKihD,QAAQwC,GAC7B,IAAKpd,EACD,OAAOrmC,KAEX,IAAK,IAAIW,EAAI,EAAGA,EAAI0lC,EAAUrlC,OAAQL,IAClC,GAAI0lC,EAAU1lC,GAAG0iD,WAAaA,EAAU,CACpChd,EAAUkd,OAAO5iD,EAAG,GACpB,MAMR,OAHyB,IAArB0lC,EAAUrlC,QACVhB,KAAKimC,mBAAmB+K,GAErBhxC,MAEJ+4C,EA7oBkB,GA+oB7Bt5C,EAAQs5C,SAAWA,GAEjB,CAAC3G,mBAAmB,GAAGC,qBAAqB,GAAGiE,mBAAmB,GAAGhE,kBAAkB,GAAGoR,oBAAoB,GAAGnR,sBAAsB,GAAGoR,eAAe,GAAGnN,gBAAgB,GAAG6E,aAAa,KAAKuI,GAAG,CAAC,SAASljD,EAAQhB,EAAOD,GAC/N,aACA,IACQozC,EADJC,EAAa9yC,MAAQA,KAAK8yC,YACtBD,EAAgB1tC,OAAO4tC,gBACtB,CAAEC,UAAW,cAAgBhxC,OAAS,SAAUurB,EAAGxgB,GAAKwgB,EAAEylB,UAAYjmC,IACvE,SAAUwgB,EAAGxgB,GAAK,IAAK,IAAIyK,KAAKzK,EAAOA,EAAEijB,eAAexY,KAAI+V,EAAE/V,GAAKzK,EAAEyK,KAClE,SAAU+V,EAAGxgB,GAEhB,SAASkmC,IAAOjzC,KAAKwJ,YAAc+jB,EADnCslB,EAActlB,EAAGxgB,GAEjBwgB,EAAEtrB,UAAkB,OAAN8K,EAAa5H,OAAOo5B,OAAOxxB,IAAMkmC,EAAGhxC,UAAY8K,EAAE9K,UAAW,IAAIgxC,KAGnFpG,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI84C,EAAsBx5C,EAAQ,uBAC9BysC,EAASN,EAAansC,EAAQ,oBAC9B25C,EAA8B,SAAUnG,GAExC,SAASmG,EAAawJ,EAAc9T,GAChC,IAAIU,EAAQzwC,KACP6jD,GAAiBA,EAAaC,WAC/B3W,EAAOqC,WAAW,uBAAwBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,eAAgBL,MAAOyiD,IAGrG,IAAInM,EAAMmM,EAAa9I,MAAQ8I,EAAaE,MAAQ,UAIpD,OAHAtT,EAAQyD,EAAOnzC,KAAKf,KAAM03C,EAAK3H,IAAY/vC,KAC3CmtC,EAAOuD,SAASD,EAAO4J,GACvB5J,EAAMuT,cAAgBH,EACfpT,EAkCX,OA7CAqC,EAAUuH,EAAcnG,GAaxBmG,EAAap4C,UAAU25C,KAAO,SAAU/b,EAAQkO,GAC5C,IAAI0C,EAAQzwC,KAOZ,MALc,YAAV6/B,GAAwB7/B,KAAKgkD,cAAcC,aAE3CpkB,EAAS,gBACTkO,EAAS,CAACA,EAAO,GAAIA,EAAO,KAEzB,IAAIa,QAAQ,SAAUI,EAASU,GAClC,IAAI0M,EAAU,CACVvc,OAAQA,EACRkO,OAAQA,EACRsO,GAAI,GACJlF,QAAS,OAEb1G,EAAMuT,cAAcF,UAAU1H,EAAS,SAAU1P,EAAO1pC,GACpD,GAAI0pC,EACAgD,EAAOhD,OADX,CAIA,GAAI1pC,EAAO0pC,MAMP,OAJIA,EAAQ,IAAI9rC,MAAMoC,EAAO0pC,MAAMlN,UAC7B3+B,KAAOmC,EAAO0pC,MAAM7rC,KAC1B6rC,EAAMhkC,KAAO1F,EAAO0pC,MAAMhkC,UAC1BgnC,EAAOhD,GAGXsC,EAAQhsC,EAAOA,cAIpBq3C,EA9CsB,CA+C/BH,EAAoBC,iBACtB16C,EAAQ46C,aAAeA,GAErB,CAAC/H,kBAAkB,GAAGoI,sBAAsB,KAAKwJ,GAAG,CAAC,SAASxjD,EAAQhB,EAAOD,GAC/E,aACA,IACQozC,EADJC,EAAa9yC,MAAQA,KAAK8yC,YACtBD,EAAgB1tC,OAAO4tC,gBACtB,CAAEC,UAAW,cAAgBhxC,OAAS,SAAUurB,EAAGxgB,GAAKwgB,EAAEylB,UAAYjmC,IACvE,SAAUwgB,EAAGxgB,GAAK,IAAK,IAAIyK,KAAKzK,EAAOA,EAAEijB,eAAexY,KAAI+V,EAAE/V,GAAKzK,EAAEyK,KAClE,SAAU+V,EAAGxgB,GAEhB,SAASkmC,IAAOjzC,KAAKwJ,YAAc+jB,EADnCslB,EAActlB,EAAGxgB,GAEjBwgB,EAAEtrB,UAAkB,OAAN8K,EAAa5H,OAAOo5B,OAAOxxB,IAAMkmC,EAAGhxC,UAAY8K,EAAE9K,UAAW,IAAIgxC,KAGnFpG,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAEtD,IAAI4rC,EAAYtsC,EAAQ,aACpBusC,EAAcvsC,EAAQ,eACtBurC,EAAYvrC,EAAQ,aACpB0yC,EAAS1yC,EAAQ,UACjBysC,EAASN,EAAansC,EAAQ,aAC9ByjD,EAAiB,IAAIC,OAAO,mBAC5BC,EAAkB,IAAID,OAAO,qBAC7BE,EAAiB,IAAIF,OAAO,sBAChC,SAASG,EAAkBrhC,EAAM9hB,GAC7B,IAAIojD,EAAQthC,EAAKshC,MAAMH,GACvB,OAAIG,GAASnjD,SAASmjD,EAAM,KAAO,GACxBpjD,EAAMuM,WAEVvM,EAEX3B,EAAQ8kD,kBAAoBA,EAG5B,IAAIE,EAAa,IAAIL,OAAO,gCACxBM,EAAkB,IAAIN,OAAO,4BACjC,SAASO,EAAWzhC,GAQhB,OANIA,EAAKshC,MAAM,mBACXthC,EAAO,UAAYA,EAAKuwB,UAAU,GAE7BvwB,EAAKshC,MAAM,oBAChBthC,EAAO,SAAWA,EAAKuwB,UAAU,IAE9BvwB,EAEX,SAAS0hC,EAAWpR,EAAOqR,GACvB,SAASrV,EAAW7uC,GAChB,MAAM,IAAIC,MAAM,yBAA2B4yC,EAAM7yC,GAAK,iBAAmBA,EAAI,QAAU6yC,EAAQ,KAInG,IAFA,IAAIsR,EAAS,CAAE5hC,KAAM,GAAIphB,KAAM,GAAIwnC,MAAO,CAAEyb,WAAW,IACnDjmB,EAAOgmB,EACFnkD,EAAI,EAAGA,EAAI6yC,EAAMxyC,OAAQL,IAAK,CACnC,IAAIuC,EAAIswC,EAAM7yC,GACd,OAAQuC,GACJ,IAAK,IACI47B,EAAKwK,MAAM0b,aACZxV,EAAW7uC,GAEfm+B,EAAKwK,MAAMyb,WAAY,EACvBjmB,EAAK5b,KAAOyhC,EAAW7lB,EAAK5b,MAC5B4b,EAAKiQ,WAAa,CAAC,CAAE7rB,KAAM,GAAIphB,KAAM,GAAIgjD,OAAQhmB,EAAMwK,MAAO,CAAEyb,WAAW,KAC3EjmB,EAAOA,EAAKiQ,WAAW,GACvB,MACJ,IAAK,WACMjQ,EAAKwK,MACZxK,EAAK5b,KAAOyhC,EAAW7lB,EAAK5b,MAC5B,IAAI+hC,EAAQnmB,GACZA,EAAOA,EAAKgmB,SAERtV,EAAW7uC,UAERskD,EAAMH,OACbhmB,EAAKwK,MAAM0b,aAAc,EACzBlmB,EAAKwK,MAAM4b,WAAY,EACvBpmB,EAAKwK,MAAM6b,YAAa,EACxB,MACJ,IAAK,WACMrmB,EAAKwK,MACZxK,EAAK5b,KAAOyhC,EAAW7lB,EAAK5b,MAC5B,IAAIkiC,EAAU,CAAEliC,KAAM,GAAIphB,KAAM,GAAIgjD,OAAQhmB,EAAKgmB,OAAQxb,MAAO,CAAEyb,WAAW,IAC7EjmB,EAAKgmB,OAAO/V,WAAW3rC,KAAKgiD,UACrBtmB,EAAKgmB,OACZhmB,EAAOsmB,EACP,MAEJ,IAAK,IAEGtmB,EAAKwK,MAAMyb,WACO,KAAdjmB,EAAK5b,OACL4b,EAAK5b,KAAOyhC,EAAW7lB,EAAK5b,aACrB4b,EAAKwK,MAAMyb,UAClBjmB,EAAKwK,MAAM4b,WAAY,EACvBpmB,EAAKwK,MAAM0b,aAAc,GAI7BlmB,EAAKwK,MAAM4b,WACO,KAAdpmB,EAAKh9B,OACD+iD,GAA8B,YAAd/lB,EAAKh9B,MACrBg9B,EAAKsW,SAAU,EACftW,EAAKh9B,KAAO,IAGZg9B,EAAKwK,MAAM4b,WAAY,GAInC,MACJ,IAAK,IACIpmB,EAAKwK,MAAM6b,YACZ3V,EAAW7uC,GAEfm+B,EAAK5b,MAAQhgB,EACb47B,EAAKwK,MAAM6b,YAAa,EACxBrmB,EAAKwK,MAAM4b,WAAY,EACvBpmB,EAAKwK,MAAM+b,WAAY,EACvB,MACJ,IAAK,IACIvmB,EAAKwK,MAAM+b,WACZ7V,EAAW7uC,GAEfm+B,EAAK5b,MAAQhgB,EACb47B,EAAKwK,MAAM+b,WAAY,EACvBvmB,EAAKwK,MAAM6b,YAAa,EACxBrmB,EAAKwK,MAAM4b,WAAY,EACvB,MACJ,QACQpmB,EAAKwK,MAAMyb,WACXjmB,EAAK5b,MAAQhgB,EACb47B,EAAKwK,MAAM0b,aAAc,EACzBlmB,EAAKwK,MAAM6b,YAAa,GAEnBrmB,EAAKwK,MAAM4b,WAChBpmB,EAAKh9B,MAAQoB,SACN47B,EAAKwK,MAAM6b,YAEbrmB,EAAKwK,MAAM+b,UAChBvmB,EAAK5b,MAAQhgB,EAGbssC,EAAW7uC,IAI3B,GAAIm+B,EAAKgmB,OACL,MAAM,IAAIlkD,MAAM,kBAIpB,cAFOkkD,EAAOxb,MACdwb,EAAO5hC,KAAOyhC,EAAWG,EAAO5hC,MACzB4hC,EA6GXrlD,EAAQw2C,eAjBR,SAAwBD,GACpB,GAA0B,iBAAf,EAIP,MAAiC,YADjCA,GADAA,EAAWA,EAAS3qC,QAAQ,MAAO,MAAMA,QAAQ,MAAO,MAAMA,QAAQ,OAAQ,MAC1Di6C,QACP7R,UAAU,EAAG,GA9FlC,SAA6BuC,GACzB,IAAIH,EAAM,CACNb,WAAW,EACX9G,OAAQ,GACRpsC,KAAM,GACNohB,KAAM,SAENshC,EAAQxO,EAASwO,MAAMC,GAC3B,IAAKD,EACD,MAAM,IAAI5jD,MAAM,kBAAoBo1C,GAmBxC,GAjBAH,EAAI/zC,KAAO0iD,EAAM,GAAGc,OACpBC,EAAaf,EAAM,IAAIlW,QAAQ,SAAUkF,IACrCA,EAAQoR,EAAWpR,GAAO,IACpB4B,UAAY5B,EAAM4B,QACxBS,EAAI3H,OAAO9qC,KAAKowC,KAEpBgR,EAAM,GAAGhkC,MAAM,KAAK8tB,QAAQ,SAAUkX,GAClC,OAAQA,GACJ,IAAK,YACD3P,EAAIb,WAAY,EAChB,MACJ,IAAK,GACD,MACJ,QACIrI,QAAQ9Y,IAAI,qBAAuB2xB,MAG3C3P,EAAI/zC,OAAS+zC,EAAI/zC,KAAK0iD,MAAME,GAC5B,MAAM,IAAI9jD,MAAM,wBAA0Bi1C,EAAI/zC,KAAO,KAEzD,OAAO+zC,EAgEQ4P,CAAoBzP,EAASvC,UAAU,GAAG6R,SAGhB,cAA7BtP,EAASvC,UAAU,EAAG,KACtBuC,EAAWA,EAASvC,UAAU,IAlE9C,SAAgCuC,GAC5B,IAAIH,EAAM,CACN6P,UAAU,EACVxX,OAAQ,GACRpsC,KAAM,GACNytC,QAAS,GACTmG,SAAS,EACTiQ,gBAAiB,KACjBziC,KAAM,YAEN0iC,EAAQ5P,EAASx1B,MAAM,aACvBzV,EAAO66C,EAAM,GAAGpB,MAAMC,GAC1B,IAAK15C,EACD,MAAM,IAAInK,MAAM,qBAGpB,GADAi1C,EAAI/zC,KAAOiJ,EAAK,GAAGu6C,QACdzP,EAAI/zC,KAAK0iD,MAAME,GAChB,MAAM,IAAI9jD,MAAM,wBAA0BmK,EAAK,GAAK,KA4BxD,GA1BAw6C,EAAax6C,EAAK,IAAIujC,QAAQ,SAAUkF,GACpCqC,EAAI3H,OAAO9qC,KAAKwhD,EAAWpR,MAE/BzoC,EAAK,GAAGyV,MAAM,KAAK8tB,QAAQ,SAAUkX,GACjC,OAAQA,GACJ,IAAK,WACD3P,EAAI6P,UAAW,EACf,MACJ,IAAK,UACD7P,EAAIH,SAAU,EACd,MACJ,IAAK,OACDG,EAAI6P,UAAW,EACf7P,EAAI8P,gBAAkB,OACtB,MACJ,IAAK,OACD9P,EAAI6P,UAAW,EACf7P,EAAI8P,gBAAkB,OACtB,MACJ,IAAK,GACD,MACJ,QACIhZ,QAAQ9Y,IAAI,qBAAuB2xB,MAI5B,EAAfI,EAAM5kD,OAAY,CAClB,IAAIgK,EAAQ46C,EAAM,GAAGpB,MAAMC,GAC3B,GAAuB,IAAnBz5C,EAAM,GAAGs6C,QAAmC,IAAnBt6C,EAAM,GAAGs6C,OAClC,MAAM,IAAI1kD,MAAM,qBAEpB2kD,EAAav6C,EAAM,IAAIsjC,QAAQ,SAAUkF,GACrCqC,EAAItG,QAAQnsC,KAAKwhD,EAAWpR,MAGpC,OAAOqC,EAcQgQ,CAAuB7P,EAASsP,SAG/C,MAAM,IAAI1kD,MAAM,qBAGpB,IAAIklD,EACA,SAAeC,EAAYjkD,EAAMohB,EAAM8iC,EAAWC,GAC9CjmD,KAAK+lD,WAAaA,EAClB/lD,KAAK8B,KAAOA,EACZ9B,KAAKkjB,KAAOA,EACZljB,KAAKgmD,UAAYA,EACjBhmD,KAAKimD,QAAUA,GAInBC,EAA2B,SAAUhS,GAErC,SAASgS,EAAUH,EAAYC,GAC3B,OAAO9R,EAAOnzC,KAAKf,KAAM+lD,EAAY,OAAQ,GAAIC,GAAW,IAAUhmD,KAc1E,OAhBA8yC,EAAUoT,EAAWhS,GAIrBgS,EAAUjkD,UAAUgkB,OAAS,SAAU7kB,GACnC,OAAO6qC,EAAUI,SAAS,KAE9B6Z,EAAUjkD,UAAUiqC,OAAS,SAAUxjC,EAAMq4B,GACzC,GAAIA,EAASr4B,EAAK1H,OACd,MAAM,IAAIJ,MAAM,gBAEpB,MAAO,CACHulD,SAAU,EACV/kD,MAAOpB,KAAK+lD,WAAW,YAAQv2B,KAGhC02B,EAjBmB,CAkB5BJ,GACEM,EAA6B,SAAUlS,GAEvC,SAASkS,EAAYL,EAAYx5C,EAAM85C,EAAQL,GAC3C,IAAIvV,EAAQzwC,KACR8B,GAASukD,EAAS,MAAQ,QAAkB,EAAP95C,EAIzC,OAHAkkC,EAAQyD,EAAOnzC,KAAKf,KAAM+lD,EAAYjkD,EAAMA,EAAMkkD,GAAW,IAAUhmD,MACjEuM,KAAOA,EACbkkC,EAAM4V,OAASA,EACR5V,EA0CX,OAjDAqC,EAAUsT,EAAalS,GASvBkS,EAAYnkD,UAAUgkB,OAAS,SAAU7kB,GACrC,IACI,IAAIwC,EAAIqpC,EAAYmJ,aAAah1C,GAMjC,OALAwC,EAAIA,EAAEkL,OAAmB,EAAZ9O,KAAKuM,MAAU+N,MAAkB,EAAZta,KAAKuM,MAEnCvM,KAAKqmD,SACLziD,EAAIA,EAAEuL,SAAqB,EAAZnP,KAAKuM,MAAUuC,OAAO,MAElCm9B,EAAUqa,SAASra,EAAUI,SAASzoC,GAAI,IAErD,MAAO8oC,GACHS,EAAOqC,WAAW,uBAAwBrC,EAAOiH,iBAAkB,CAC/D3yC,IAAKzB,KAAKgmD,UACV9iC,YAAa,EACb9hB,MAAOA,IAGf,OAAO,MAEXglD,EAAYnkD,UAAUiqC,OAAS,SAAUxjC,EAAMq4B,GACvCr4B,EAAK1H,OAAS+/B,EAAS,IACvBoM,EAAOqC,WAAW,yBAA2BxvC,KAAK8B,KAAO,QAASqrC,EAAOiH,iBAAkB,CACvF3yC,IAAKzB,KAAKgmD,UACVO,UAAWvmD,KAAK8B,KAChBV,MAAO6qC,EAAU4K,QAAQnuC,EAAK3G,MAAMg/B,EAAQA,EAAS,OAG7D,IAAIylB,EAAa,GAAKxmD,KAAKuM,KACvBnL,EAAQ6rC,EAAYmJ,aAAa1tC,EAAK3G,MAAMg/B,EAASylB,EAAYzlB,EAAS,KAO9E,OALI3/B,EADApB,KAAKqmD,OACGjlD,EAAM+N,SAAqB,EAAZnP,KAAKuM,MAGpBnL,EAAMkZ,MAAkB,EAAZta,KAAKuM,MAEtB,CACH45C,SAAU,GACV/kD,MAAOpB,KAAK+lD,WAAW/lD,KAAK8B,KAAMV,KAGnCglD,EAlDqB,CAmD9BN,GACEW,EAAe,IAAIL,EAAY,SAAUljC,EAAM9hB,GAAS,OAAOA,GAAU,IAAI,EAAO,QACpFslD,EAA8B,SAAUxS,GAExC,SAASwS,EAAaX,EAAYC,GAC9B,OAAO9R,EAAOnzC,KAAKf,KAAM+lD,EAAY,OAAQ,OAAQC,GAAW,IAAUhmD,KAwB9E,OA1BA8yC,EAAU4T,EAAcxS,GAIxBwS,EAAazkD,UAAUgkB,OAAS,SAAU7kB,GACtC,OAAOqlD,EAAaxgC,OAAS7kB,EAAQ,EAAI,IAE7CslD,EAAazkD,UAAUiqC,OAAS,SAAUxjC,EAAMq4B,GAC5C,IACI,IAAI/9B,EAASyjD,EAAava,OAAOxjC,EAAMq4B,GAE3C,MAAO2L,GAQH,KAPqB,uCAAjBA,EAAM3Z,QACNoa,EAAOqC,WAAW,qCAAsCrC,EAAOiH,iBAAkB,CAC7E3yC,IAAKzB,KAAKgmD,UACVO,UAAW,UACXnlD,MAAOsrC,EAAMtrC,QAGfsrC,EAEV,MAAO,CACHyZ,SAAUnjD,EAAOmjD,SACjB/kD,MAAOpB,KAAK+lD,WAAW,QAAS/iD,EAAO5B,MAAMoM,YAG9Ck5C,EA3BsB,CA4B/BZ,GACEa,EAAiC,SAAUzS,GAE3C,SAASyS,EAAgBZ,EAAY/kD,EAAQglD,GACzC,IAAIvV,EAAQzwC,KACR8B,EAAQ,QAAUd,EAGtB,OAFAyvC,EAAQyD,EAAOnzC,KAAKf,KAAM+lD,EAAYjkD,EAAMA,EAAMkkD,GAAW,IAAUhmD,MACjEgB,OAASA,EACRyvC,EAiCX,OAvCAqC,EAAU6T,EAAiBzS,GAQ3ByS,EAAgB1kD,UAAUgkB,OAAS,SAAU7kB,GACzC,IAAI4B,EAAS,IAAIb,WAAW,IAC5B,IACI,IAAIuG,EAAOujC,EAAUI,SAASjrC,GAC9B,GAAkB,GAAdsH,EAAK1H,OACL,MAAM,IAAIJ,MAEdoC,EAAOL,IAAI+F,GAEf,MAAOgkC,GACHS,EAAOqC,WAAW,WAAaxvC,KAAK8B,KAAO,SAAUqrC,EAAOiH,iBAAkB,CAC1E3yC,IAAKzB,KAAKgmD,UACV9iC,YAAa,EACb9hB,MAAQsrC,EAAMtrC,OAASA,IAG/B,OAAO4B,GAEX2jD,EAAgB1kD,UAAUiqC,OAAS,SAAUxjC,EAAMq4B,GAQ/C,OAPIr4B,EAAK1H,OAAS+/B,EAAS,IACvBoM,EAAOqC,WAAW,yBAA2B1tC,KAAO,QAASqrC,EAAOiH,iBAAkB,CAClF3yC,IAAKzB,KAAKgmD,UACVO,UAAWvmD,KAAK8B,KAChBV,MAAO6qC,EAAU4K,QAAQnuC,EAAK3G,MAAMg/B,EAAQA,EAAS,OAGtD,CACHolB,SAAU,GACV/kD,MAAOpB,KAAK+lD,WAAW/lD,KAAK8B,KAAMmqC,EAAU4K,QAAQnuC,EAAK3G,MAAMg/B,EAAQA,EAAS/gC,KAAKgB,YAGtF2lD,EAxCyB,CAyClCb,GACEc,EAA8B,SAAU1S,GAExC,SAAS0S,EAAab,EAAYC,GAC9B,OAAO9R,EAAOnzC,KAAKf,KAAM+lD,EAAY,UAAW,UAAWC,GAAW,IAAUhmD,KA6BpF,OA/BA8yC,EAAU8T,EAAc1S,GAIxB0S,EAAa3kD,UAAUgkB,OAAS,SAAU7kB,GACtC,IAAI4B,EAAS,IAAIb,WAAW,IAC5B,IACIa,EAAOL,IAAIspC,EAAUI,SAASW,EAAUqC,WAAWjuC,IAAS,IAEhE,MAAOsrC,GACHS,EAAOqC,WAAW,kBAAmBrC,EAAOiH,iBAAkB,CAC1D3yC,IAAKzB,KAAKgmD,UACV9iC,YAAa,EACb9hB,MAAOA,IAGf,OAAO4B,GAEX4jD,EAAa3kD,UAAUiqC,OAAS,SAAUxjC,EAAMq4B,GAQ5C,OAPIr4B,EAAK1H,OAAS+/B,EAAS,IACvBoM,EAAOqC,WAAW,qCAAsCrC,EAAOiH,iBAAkB,CAC7E3yC,IAAKzB,KAAKgmD,UACVO,UAAW,UACXnlD,MAAO6qC,EAAU4K,QAAQnuC,EAAK3G,MAAMg/B,EAAQA,EAAS,OAGtD,CACHolB,SAAU,GACV/kD,MAAOpB,KAAK+lD,WAAW,UAAW/Y,EAAUqC,WAAWpD,EAAU4K,QAAQnuC,EAAK3G,MAAMg/B,EAAS,GAAIA,EAAS,SAG3G6lB,EAhCsB,CAiC/Bd,GACF,SAASe,EAAoBzlD,GACzB,IAAI0lD,EAAar8C,KAAKi2C,MAAM,GAAKj2C,KAAKgB,KAAKrK,EAAMJ,OAAS,KACtDuH,EAAU,IAAIpG,WAAW2kD,EAAa1lD,EAAMJ,QAChD,OAAOirC,EAAU3lB,OAAO,CACpBmgC,EAAaxgC,OAAO7kB,EAAMJ,QAC1BI,EACAmH,IAGR,SAASw+C,EAAoBr+C,EAAMq4B,EAAQilB,GACnCt9C,EAAK1H,OAAS+/B,EAAS,IACvBoM,EAAOqC,WAAW,4CAA6CrC,EAAOiH,iBAAkB,CACpF3yC,IAAKukD,EACLO,UAAW,eACXnlD,MAAO6qC,EAAU4K,QAAQnuC,EAAK3G,MAAMg/B,EAAQA,EAAS,OAG7D,IAAI//B,EAASylD,EAAava,OAAOxjC,EAAMq4B,GAAQ3/B,MAC/C,IACIJ,EAASA,EAAO2M,WAEpB,MAAO++B,GACHS,EAAOqC,WAAW,gCAAiCrC,EAAOiH,iBAAkB,CACxE3yC,IAAKukD,EACLO,UAAW,eACXnlD,MAAOJ,EAAOoK,aAUtB,OAPI1C,EAAK1H,OAAS+/B,EAAS,GAAK//B,GAC5BmsC,EAAOqC,WAAW,0CAA2CrC,EAAOiH,iBAAkB,CAClF3yC,IAAKukD,EACLO,UAAW,eACXnlD,MAAO6qC,EAAU4K,QAAQnuC,EAAK3G,MAAMg/B,EAAQA,EAAS,GAAK//B,MAG3D,CACHmlD,SAAU17C,KAAKi2C,MAAM,GAAK,GAAKj2C,KAAKgB,KAAKzK,EAAS,KAClDI,MAAOsH,EAAK3G,MAAMg/B,EAAS,GAAIA,EAAS,GAAK//B,IAGrD,IAAIgmD,EAAmC,SAAU9S,GAE7C,SAAS8S,EAAkBjB,EAAYC,GACnC,OAAO9R,EAAOnzC,KAAKf,KAAM+lD,EAAY,QAAS,QAASC,GAAW,IAAShmD,KAoB/E,OAtBA8yC,EAAUkU,EAAmB9S,GAI7B8S,EAAkB/kD,UAAUgkB,OAAS,SAAU7kB,GAC3C,IACI,OAAOylD,EAAoB5a,EAAUI,SAASjrC,IAElD,MAAOsrC,GACHS,EAAOqC,WAAW,sBAAuBrC,EAAOiH,iBAAkB,CAC9D3yC,IAAKzB,KAAKgmD,UACV9iC,YAAa,EACb9hB,MAAOsrC,EAAMtrC,QAGrB,OAAO,MAEX4lD,EAAkB/kD,UAAUiqC,OAAS,SAAUxjC,EAAMq4B,GACjD,IAAI/9B,EAAS+jD,EAAoBr+C,EAAMq4B,EAAQ/gC,KAAKgmD,WAEpD,OADAhjD,EAAO5B,MAAQpB,KAAK+lD,WAAW,QAAS9Z,EAAU4K,QAAQ7zC,EAAO5B,QAC1D4B,GAEJgkD,EAvB2B,CAwBpClB,GACEmB,EAA6B,SAAU/S,GAEvC,SAAS+S,EAAYlB,EAAYC,GAC7B,OAAO9R,EAAOnzC,KAAKf,KAAM+lD,EAAY,SAAU,SAAUC,GAAW,IAAShmD,KAiBjF,OAnBA8yC,EAAUmU,EAAa/S,GAIvB+S,EAAYhlD,UAAUgkB,OAAS,SAAU7kB,GAQrC,MAPuB,iBAAZ,GACP+rC,EAAOqC,WAAW,uBAAwBrC,EAAOiH,iBAAkB,CAC/D3yC,IAAKzB,KAAKgmD,UACV9iC,YAAa,EACb9hB,MAAOA,IAGRylD,EAAoBzT,EAAOwC,YAAYx0C,KAElD6lD,EAAYhlD,UAAUiqC,OAAS,SAAUxjC,EAAMq4B,GAC3C,IAAI/9B,EAAS+jD,EAAoBr+C,EAAMq4B,EAAQ/gC,KAAKgmD,WAEpD,OADAhjD,EAAO5B,MAAQpB,KAAK+lD,WAAW,SAAU3S,EAAO+P,aAAangD,EAAO5B,QAC7D4B,GAEJikD,EApBqB,CAqB9BnB,GACF,SAASoB,EAAU36C,GACf,OAAO9B,KAAKi2C,MAAM,GAAKj2C,KAAKgB,KAAKc,EAAO,KAE5C,SAAS46C,EAAKC,EAAQC,GAClB,GAAIrlD,MAAME,QAAQmlD,SAGb,GAAIA,GAA8B,iBAAb,EAAuB,CAC7C,IAAIC,EAAc,GAClBF,EAAO9Y,QAAQ,SAAUiZ,GACrBD,EAAYlkD,KAAKikD,EAAOE,EAAMvB,cAElCqB,EAASC,OAGTna,EAAOqC,WAAW,sBAAuBrC,EAAOiH,iBAAkB,CAC9DmS,UAAW,QACXrjC,YAAa,EACb9hB,MAAOimD,IAGXD,EAAOpmD,SAAWqmD,EAAOrmD,QACzBmsC,EAAOqC,WAAW,8BAA+BrC,EAAOiH,iBAAkB,CACtEmS,UAAW,QACXnlD,MAAOimD,IAGf,IAAIG,EAAQ,GACZJ,EAAO9Y,QAAQ,SAAUiZ,EAAO9hD,GAC5B+hD,EAAMpkD,KAAK,CAAE6iD,QAASsB,EAAMtB,QAAS7kD,MAAOmmD,EAAMthC,OAAOohC,EAAO5hD,QAEpE,IAAIgiD,EAAa,EAAGC,EAAc,EAClCF,EAAMlZ,QAAQ,SAAUqZ,GAChBA,EAAK1B,SACLwB,GAAc,GACdC,GAAeR,EAAUS,EAAKvmD,MAAMJ,SAGpCymD,GAAcP,EAAUS,EAAKvmD,MAAMJ,UAG3C,IAAI+/B,EAAS,EAAG6mB,EAAgBH,EAC5B/+C,EAAO,IAAIvG,WAAWslD,EAAaC,GAgBvC,OAfAF,EAAMlZ,QAAQ,SAAUqZ,GAChBA,EAAK1B,SAELv9C,EAAK/F,IAAI8jD,EAAaxgC,OAAO2hC,GAAgB7mB,GAC7CA,GAAU,GAEVr4B,EAAK/F,IAAIglD,EAAKvmD,MAAOwmD,GACrBA,GAAiBV,EAAUS,EAAKvmD,MAAMJ,UAItC0H,EAAK/F,IAAIglD,EAAKvmD,MAAO2/B,GACrBA,GAAUmmB,EAAUS,EAAKvmD,MAAMJ,WAGhC0H,EAEX,SAASm/C,EAAOT,EAAQ1+C,EAAMq4B,GAC1B,IAAI+mB,EAAa/mB,EACbolB,EAAW,EACX/kD,EAAQ,GA8BZ,OA7BAgmD,EAAO9Y,QAAQ,SAAUiZ,GACrB,GAAIA,EAAMtB,QAAS,CACf,IAAI2B,EAAgBnB,EAAava,OAAOxjC,EAAMq4B,IAC1C/9B,EAASukD,EAAMrb,OAAOxjC,EAAMo/C,EAAaF,EAAcxmD,MAAMuM,aAE1Dw4C,SAAWyB,EAAczB,cAGhC,IAAInjD,EAASukD,EAAMrb,OAAOxjC,EAAMq4B,GAEhBvR,MAAhBxsB,EAAO5B,OACPA,EAAMgC,KAAKJ,EAAO5B,OAEtB2/B,GAAU/9B,EAAOmjD,SACjBA,GAAYnjD,EAAOmjD,WAEvBiB,EAAO9Y,QAAQ,SAAUiZ,EAAO9hD,GAC5B,IAAI3D,EAAOylD,EAAMvB,UACZlkD,IAGQ,WAATA,IACAA,EAAO,WAEQ,MAAfV,EAAMU,KAGVV,EAAMU,GAAQV,EAAMqE,OAEjB,CACHrE,MAAOA,EACP+kD,SAAUA,GAGlB,IAAI4B,EAA4B,SAAU7T,GAEtC,SAAS6T,EAAWhC,EAAYwB,EAAOvmD,EAAQglD,GAC3C,IAAIvV,EAAQzwC,KACRkjB,EAAQqkC,EAAMrkC,KAAO,KAAiB,GAAVliB,EAAcA,EAAS,IAAM,IACzDilD,GAAuB,IAAZjlD,GAAiBumD,EAAMtB,QAItC,OAHAxV,EAAQyD,EAAOnzC,KAAKf,KAAM+lD,EAAY,QAAS7iC,EAAM8iC,EAAWC,IAAYjmD,MACtEunD,MAAQA,EACd9W,EAAMzvC,OAASA,EACRyvC,EAsEX,OA9EAqC,EAAUiV,EAAY7T,GAUtB6T,EAAW9lD,UAAUgkB,OAAS,SAAU7kB,GAC/BY,MAAME,QAAQd,IACf+rC,EAAOqC,WAAW,uBAAwBrC,EAAOiH,iBAAkB,CAC/D3yC,IAAKzB,KAAKgmD,UACVO,UAAW,QACXrjC,YAAa,EACb9hB,MAAOA,IAGf,IAAIkzC,EAAQt0C,KAAKgB,OACbgC,EAAS,IAAIb,WAAW,IACb,IAAXmyC,IACAA,EAAQlzC,EAAMJ,OACdgC,EAASyjD,EAAaxgC,OAAOquB,IAE7BA,IAAUlzC,EAAMJ,QAChBmsC,EAAOqC,WAAW,8BAA+BrC,EAAOiH,iBAAkB,CACtE3yC,IAAKzB,KAAKgmD,UACVO,UAAW,QACXjS,MAAOlzC,EAAMJ,OACbuzC,cAAeD,EACflzC,MAAOA,IAIf,IADA,IAAIgmD,EAAS,GACJzmD,EAAI,EAAGA,EAAIS,EAAMJ,OAAQL,IAC9BymD,EAAOhkD,KAAKpD,KAAKunD,OAErB,OAAOtb,EAAU3lB,OAAO,CAACtjB,EAAQmkD,EAAKC,EAAQhmD,MAElD2mD,EAAW9lD,UAAUiqC,OAAS,SAAUxjC,EAAMq4B,GAG1C,IAAIolB,EAAW,EACX7R,EAAQt0C,KAAKgB,OACjB,IAAe,IAAXszC,EAAc,CACd,IACI,IAAI0T,EAAgBvB,EAAava,OAAOxjC,EAAMq4B,GAElD,MAAO2L,GACHS,EAAOqC,WAAW,6CAA8CrC,EAAOiH,iBAAkB,CACrF3yC,IAAKzB,KAAKgmD,UACVO,UAAW,QACXnlD,MAAOsrC,EAAMtrC,QAGrB,IACIkzC,EAAQ0T,EAAc5mD,MAAMuM,WAEhC,MAAO++B,GACHS,EAAOqC,WAAW,wBAAyBrC,EAAOiH,iBAAkB,CAChE3yC,IAAKzB,KAAKgmD,UACVO,UAAW,QACXnlD,MAAO4mD,EAAc5mD,MAAMgK,aAGnC+6C,GAAY6B,EAAc7B,SAC1BplB,GAAUinB,EAAc7B,SAG5B,IADA,IAAIiB,EAAS,GACJzmD,EAAI,EAAGA,EAAI2zC,EAAO3zC,IACvBymD,EAAOhkD,KAAKpD,KAAKunD,OAErB,IAAIvkD,EAAS6kD,EAAOT,EAAQ1+C,EAAMq4B,GAGlC,OAFA/9B,EAAOmjD,UAAYA,EACnBnjD,EAAO5B,MAAQpB,KAAK+lD,WAAW/lD,KAAKkjB,KAAMlgB,EAAO5B,OAC1C4B,GAEJ+kD,EA/EoB,CAgF7BjC,GACEmC,EAA4B,SAAU/T,GAEtC,SAAS+T,EAAWlC,EAAYqB,EAAQpB,GACpC,IAAIvV,EAAQzwC,KACRimD,GAAU,EACV1S,EAAQ,GACZ6T,EAAO9Y,QAAQ,SAAUiZ,GACjBA,EAAMtB,UACNA,GAAU,GAEd1S,EAAMnwC,KAAKmkD,EAAMrkC,QAErB,IAAIA,EAAQ,SAAWqwB,EAAM7vC,KAAK,KAAO,IAGzC,OAFA+sC,EAAQyD,EAAOnzC,KAAKf,KAAM+lD,EAAY,QAAS7iC,EAAM8iC,EAAWC,IAAYjmD,MACtEonD,OAASA,EACR3W,EAUX,OAxBAqC,EAAUmV,EAAY/T,GAgBtB+T,EAAWhmD,UAAUgkB,OAAS,SAAU7kB,GACpC,OAAO+lD,EAAKnnD,KAAKonD,OAAQhmD,IAE7B6mD,EAAWhmD,UAAUiqC,OAAS,SAAUxjC,EAAMq4B,GAC1C,IAAI/9B,EAAS6kD,EAAO7nD,KAAKonD,OAAQ1+C,EAAMq4B,GAEvC,OADA/9B,EAAO5B,MAAQpB,KAAK+lD,WAAW/lD,KAAKkjB,KAAMlgB,EAAO5B,OAC1C4B,GAEJilD,EAzBoB,CA0B7BnC,GAOF,SAASP,EAAankD,GAIlB,IAHA,IAAI4B,EAAS,GACTklD,EAAQ,GACRC,EAAQ,EACHpnB,EAAS,EAAGA,EAAS3/B,EAAMJ,OAAQ+/B,IAAU,CAClD,IAAI79B,EAAI9B,EAAM2/B,GACd,GAAU,MAAN79B,GAAuB,IAAVilD,EACbnlD,EAAOI,KAAK8kD,GACZA,EAAQ,QAIR,GADAA,GAAShlD,EACC,MAANA,EACAilD,SAEC,GAAU,MAANjlD,IAEU,MADfilD,EAEI,MAAM,IAAIvnD,MAAM,yBAMhC,OADAoC,EAAOI,KAAK8kD,GACLllD,EAEX,IAAIolD,EAAkB,CAClBhZ,QAASwX,EACTyB,KAAM3B,EACNpF,OAAQ2F,EACR1jD,MAAOyjD,GAYX,SAASsB,EAAcvC,EAAYvS,GAC/B,IA0BIgR,EA1BA+C,EAAQa,EAAgB5U,EAAMtwB,MAClC,GAAIqkC,EACA,OAAO,IAAIA,EAAMxB,EAAYvS,EAAM1xC,MAGvC,GADI0iD,EAAQhR,EAAMtwB,KAAKshC,MAAMH,GASzB,OANa,KADT93C,EAAOlL,SAASmjD,EAAM,IAAM,SACP,IAAPj4C,GAAeA,EAAO,GAAO,IAC3C4gC,EAAOqC,WAAW,WAAagV,EAAM,GAAK,cAAerX,EAAOiH,iBAAkB,CAC9E3yC,IAAK,QACLL,MAAOoyC,IAGR,IAAI4S,EAAYL,EAAYx5C,EAAO,EAAiB,QAAbi4C,EAAM,GAAehR,EAAM1xC,MAG7E,GADI0iD,EAAQhR,EAAMtwB,KAAKshC,MAAML,GASzB,OANa,KADT53C,EAAOlL,SAASmjD,EAAM,MACD,GAAPj4C,IACd4gC,EAAOqC,WAAW,uBAAwBrC,EAAOiH,iBAAkB,CAC/D3yC,IAAK,QACLL,MAAOoyC,IAGR,IAAImT,EAAgBZ,EAAYx5C,EAAMinC,EAAM1xC,MAGvD,GADI0iD,EAAQhR,EAAMtwB,KAAKshC,MAAMF,GAClB,CACP,IAAI/3C,EAAOlL,SAASmjD,EAAM,IAAM,MAEhC,OADAhR,EAAMtwB,KAAOshC,EAAM,GACZ,IAAIuD,EAAWhC,EAAYuC,EAAcvC,EAAYvS,GAAQjnC,EAAMinC,EAAM1xC,MAEpF,MAAmC,UAA/B0xC,EAAMtwB,KAAKuwB,UAAU,EAAG,GA3ChC,SAA4BsS,EAAYhX,EAAYiX,GAC3CjX,IACDA,EAAa,IAEjB,IAAIqY,EAAS,GAIb,OAHArY,EAAWT,QAAQ,SAAUia,GACzBnB,EAAOhkD,KAAKklD,EAAcvC,EAAYwC,MAEnC,IAAIN,EAAWlC,EAAYqB,EAAQpB,GAoC/BwC,CAAmBzC,EAAYvS,EAAMzE,WAAYyE,EAAM1xC,MAE/C,KAAf0xC,EAAMtwB,KACC,IAAIgjC,EAAUH,EAAYvS,EAAM1xC,OAE3CqrC,EAAOqC,WAAW,eAAgBrC,EAAOiH,iBAAkB,CACvD3yC,IAAK,OACLL,MAAOoyC,EAAMtwB,OAEV,MAEX,IAAIulC,EAA0B,WAC1B,SAASA,EAAS1C,GAETA,IACDA,EAAaxB,GAGjBvkD,KAAK+lD,WAAaA,EAgCtB,OA9BA0C,EAASxmD,UAAUgkB,OAAS,SAAUstB,EAAO8T,GACrC9T,EAAMvyC,SAAWqmD,EAAOrmD,QACxBmsC,EAAOqC,WAAW,+BAAgCrC,EAAOiH,iBAAkB,CACvEE,MAAO,CAAEf,MAAOA,EAAMvyC,OAAQqmD,OAAQA,EAAOrmD,QAC7CI,MAAO,CAAEmyC,MAAOA,EAAO8T,OAAQA,KAGvC,IAAID,EAAS,GAUb,OATA7T,EAAMjF,QAAQ,SAAUprB,GAIE,iBAAX,IACPA,EAAO0hC,EAAW1hC,IAEtBkkC,EAAOhkD,KAAKklD,EAActoD,KAAK+lD,WAAY7iC,KAC5CljB,MACIisC,EAAU4K,QAAQ,IAAIoR,EAAWjoD,KAAK+lD,WAAYqB,EAAQ,KAAKnhC,OAAOohC,KAEjFoB,EAASxmD,UAAUiqC,OAAS,SAAUqH,EAAO7qC,GACzC,IAAI0+C,EAAS,GAQb,OAPA7T,EAAMjF,QAAQ,SAAUprB,GAEE,iBAAX,IACPA,EAAO0hC,EAAW1hC,IAEtBkkC,EAAOhkD,KAAKklD,EAActoD,KAAK+lD,WAAY7iC,KAC5CljB,MACI,IAAIioD,EAAWjoD,KAAK+lD,WAAYqB,EAAQ,KAAKlb,OAAOD,EAAUI,SAAS3jC,GAAO,GAAGtH,OAErFqnD,EAvCkB,GAyC7BhpD,EAAQgpD,SAAWA,EACnBhpD,EAAQg1C,gBAAkB,IAAIgU,GAE5B,CAACC,YAAY,GAAGC,cAAc,GAAGC,YAAY,GAAGC,WAAW,GAAGC,SAAS,KAAKC,GAAG,CAAC,SAASroD,EAAQhB,EAAOD,GAC1G,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAEtD,IAAIqI,EAAK/I,EAAQ,SACburC,EAAYvrC,EAAQ,aACpByyC,EAAczyC,EAAQ,eACtBg9C,EAAQh9C,EAAQ,SAChBysC,EAASzsC,EAAQ,YACrB,SAASsoD,EAAmB5Z,GACC,iBAAd,GAA2BA,EAAQoV,MAAM,wBAChDrX,EAAOqC,WAAW,kBAAmBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,UAAWL,MAAOguC,IAK3F,IAFA,IAAI6Z,GADJ7Z,EAAUA,EAAQvD,eACE4H,UAAU,GAAGjzB,MAAM,IACnC0oC,EAAS,IAAI/mD,WAAW,IACnBgnD,EAAM,EAAGA,EAAM,GAAIA,IACxBD,EAAOC,GAAOF,EAAME,GAAKhmD,WAAW,GAExC+lD,EAASjd,EAAUI,SAAS8G,EAAYwC,UAAUuT,IAClD,IAAK,IAAIvoD,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACI,GAAxBuoD,EAAOvoD,GAAK,IAAM,IACnBsoD,EAAMtoD,GAAKsoD,EAAMtoD,GAAGyoD,eAEO,IAAT,GAAjBF,EAAOvoD,GAAK,MACbsoD,EAAMtoD,EAAI,GAAKsoD,EAAMtoD,EAAI,GAAGyoD,eAGpC,MAAO,KAAOH,EAAMvlD,KAAK,IAa7B,IADA,IAAI2lD,EAAa,GACR1oD,EAAI,EAAGA,EAAI,GAAIA,IACpB0oD,EAAW7lD,OAAO7C,IAAM6C,OAAO7C,GAEnC,IAASA,EAAI,EAAGA,EAAI,GAAIA,IACpB0oD,EAAW7lD,OAAOC,aAAa,GAAK9C,IAAM6C,OAAO,GAAK7C,GAG1D,IAhBewV,EAgBXmzC,EAAa7+C,KAAK4e,OAhBPlT,EADQ,iBAEf1L,KAAK8+C,MACE9+C,KAAK8+C,MAAMpzC,GAEf1L,KAAKopB,IAAI1d,GAAK1L,KAAK++C,OAa9B,SAASC,EAAara,GAElBA,GADAA,EAAUA,EAAQga,eACA3V,UAAU,GAAKrE,EAAQqE,UAAU,EAAG,GAAK,KAC3D,IAAIiW,EAAW,GAKf,IAJAta,EAAQ5uB,MAAM,IAAI8tB,QAAQ,SAAUprC,GAChCwmD,GAAYL,EAAWnmD,KAGpBwmD,EAAS1oD,QAAUsoD,GAAY,CAClC,IAAIhjD,EAAQojD,EAASjW,UAAU,EAAG6V,GAClCI,EAAWroD,SAASiF,EAAO,IAAM,GAAKojD,EAASjW,UAAUntC,EAAMtF,QAGnE,IADA,IAAI2oD,EAAWnmD,OAAO,GAAMnC,SAASqoD,EAAU,IAAM,IAC9CC,EAAS3oD,OAAS,GACrB2oD,EAAW,IAAMA,EAErB,OAAOA,EAGX,SAASta,EAAWD,EAASwa,GACzB,IAAI5mD,EAAS,KAIb,GAHyB,iBAAd,GACPmqC,EAAOqC,WAAW,kBAAmBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,UAAWL,MAAOguC,IAEvFA,EAAQoV,MAAM,0BAEkB,OAA5BpV,EAAQqE,UAAU,EAAG,KACrBrE,EAAU,KAAOA,GAErBpsC,EAASgmD,EAAmB5Z,GAExBA,EAAQoV,MAAM,kCAAoCxhD,IAAWosC,GAC7DjC,EAAOqC,WAAW,uBAAwBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,UAAWL,MAAOguC,SAI/F,GAAIA,EAAQoV,MAAM,kCAAmC,CAMtD,IAJIpV,EAAQqE,UAAU,EAAG,KAAOgW,EAAara,IACzCjC,EAAOqC,WAAW,oBAAqBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,UAAWL,MAAOguC,IAE7FpsC,EAAS,IAAKyG,EAAG2lC,EAAQqE,UAAU,GAAI,IAAKroC,SAAS,IAC9CpI,EAAOhC,OAAS,IACnBgC,EAAS,IAAMA,EAEnBA,EAASgmD,EAAmB,KAAOhmD,QAGnCmqC,EAAOqC,WAAW,kBAAmBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,UAAWL,MAAOguC,IAE3F,GAAIwa,EAAY,CAEZ,IADA,IAAIC,EAAS,IAAKpgD,EAAGzG,EAAOywC,UAAU,GAAI,IAAKroC,SAAS,IAAIg+C,cACrDS,EAAO7oD,OAAS,IACnB6oD,EAAS,IAAMA,EAEnB,MAAO,KAAOJ,EAAa,OAASI,GAAUA,EAElD,OAAO7mD,EAEXvD,EAAQ4vC,WAAaA,EAYrB5vC,EAAQ0yC,mBAVR,SAA4BlE,GACxB,IAAKA,EAAYZ,KACb,MAAM,IAAIzsC,MAAM,wBAEpB,IAAIkwB,EAAQmd,EAAYnd,MACxB,OAAOue,EAAW,KAAO8D,EAAYwC,UAAU+H,EAAMz3B,OAAO,CACxDopB,EAAWpB,EAAYZ,MACvBpB,EAAUoT,WAAWpT,EAAU4K,QAAQ/lB,OACvC2iB,UAAU,OAIhB,CAACmV,YAAY,GAAGC,WAAW,GAAGiB,cAAc,GAAGC,QAAQ,GAAGjjC,QAAQ,IAAIkjC,GAAG,CAAC,SAAStpD,EAAQhB,EAAOD,GACpG,aACA,IAAIwqD,EAAmBjqD,MAAQA,KAAKiqD,iBAAoB,SAAUl+C,GAC9D,OAAQA,GAAOA,EAAI+gC,WAAc/gC,EAAM,CAAEm+C,QAAWn+C,IAEpD8gC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAQtD,IAAI+oD,EAAUF,EAAgBvpD,EAAQ,UAgClCurC,EAAYvrC,EAAQ,aACpBysC,EAASN,EAAansC,EAAQ,oBAClC,SAAS0pD,EAAahpD,GAClB,OAAOipD,EAAYjpD,GAEvB,IAAIkpD,EAA2B,WAC3B,SAASA,EAAUlpD,GACf,KAAMpB,gBAAgBsqD,GAClB,MAAM,IAAI1pD,MAAM,eAEpB,GAAuB,iBAAZ,EACHqrC,EAAUkI,YAAY/yC,IACT,MAATA,IACAA,EAAQ,OAEZpB,KAAKuqD,IAAM,IAAIJ,EAAQD,QAAQzgD,GAAGrI,EAAMqyC,UAAU,GAAI,KAEpC,MAAbryC,EAAM,IAAc6qC,EAAUkI,YAAY/yC,EAAMqyC,UAAU,IAC/DzzC,KAAKuqD,IAAM,IAAKJ,EAAQD,QAAQzgD,GAAGrI,EAAMqyC,UAAU,GAAI,IAAK7oC,IAAInL,EAAQ+qD,oBAAoBD,KAEvFnpD,EAAMojD,MAAM,gBACJ,IAATpjD,IACAA,EAAQ,KAEZpB,KAAKuqD,IAAM,IAAIJ,EAAQD,QAAQzgD,GAAGrI,SAGrC,GAAuB,iBAAZ,EAAsB,CAC9BqJ,KAAKi2C,MAAMt/C,KAAWA,GACtB+rC,EAAOqC,WAAW,YAAarC,EAAOsd,cAAe,CAAEtP,UAAW,WAAYuP,MAAO,YAAatpD,MAAOA,EAAOupD,YAAalgD,KAAKi2C,MAAMt/C,KAE5I,IACIpB,KAAKuqD,IAAM,IAAIJ,EAAQD,QAAQzgD,GAAGrI,GAEtC,MAAOsrC,GACHS,EAAOqC,WAAW,WAAYrC,EAAOsd,cAAe,CAAEtP,UAAW,WAAYuP,MAAO,WAAYE,QAASle,EAAMlN,gBAG9G2qB,EAAQD,QAAQzgD,GAAGI,KAAKzI,GAC7BpB,KAAKuqD,IAAMnpD,EAENgpD,EAAahpD,GAClBpB,KAAKuqD,IAAMnpD,EAAMmpD,IAEZte,EAAU4e,WAAWzpD,GAC1BpB,KAAKuqD,IAAM,IAAIJ,EAAQD,QAAQzgD,GAAGwiC,EAAU4K,QAAQz1C,GAAOqyC,UAAU,GAAI,IAGzEtG,EAAOqC,WAAW,0BAA2BrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAuErG,OApEAkpD,EAAUroD,UAAUkN,SAAW,SAAU/N,GACrC,OAAO,IAAIkpD,EAAUtqD,KAAKuqD,IAAIp7C,SAAS/N,KAE3CkpD,EAAUroD,UAAU6M,OAAS,SAAU1N,GACnC,OAAO,IAAIkpD,EAAUtqD,KAAKuqD,IAAIz7C,OAAO1N,KAEzCkpD,EAAUroD,UAAU2O,IAAM,SAAUk6C,GAChC,OAAO,IAAIR,EAAUtqD,KAAKuqD,IAAI35C,IAAIwlC,EAAa0U,GAAOP,OAE1DD,EAAUroD,UAAU4O,IAAM,SAAUi6C,GAChC,OAAO,IAAIR,EAAUtqD,KAAKuqD,IAAI15C,IAAIulC,EAAa0U,GAAOP,OAE1DD,EAAUroD,UAAUiZ,IAAM,SAAU4vC,GAChC,IAAIvqD,EAAI61C,EAAa0U,GAAOP,IAI5B,OAHIhqD,EAAEiN,UACF2/B,EAAOqC,WAAW,mBAAoBrC,EAAOsd,cAAe,CAAEtP,UAAW,SAAUuP,MAAO,qBAEvF,IAAIJ,EAAUtqD,KAAKuqD,IAAIrvC,IAAI3a,KAEtC+pD,EAAUroD,UAAU2I,IAAM,SAAUkgD,GAChC,OAAO,IAAIR,EAAUtqD,KAAKuqD,IAAI3/C,IAAIwrC,EAAa0U,GAAOP,OAE1DD,EAAUroD,UAAU8J,IAAM,SAAU++C,GAChC,OAAO,IAAIR,EAAUtqD,KAAKuqD,IAAIx+C,IAAIqqC,EAAa0U,GAAOP,OAE1DD,EAAUroD,UAAUkK,IAAM,SAAU2+C,GAChC,OAAO,IAAIR,EAAUtqD,KAAKuqD,IAAIp+C,IAAIiqC,EAAa0U,GAAOP,OAE1DD,EAAUroD,UAAUqY,MAAQ,SAAUlZ,GAClC,OAAO,IAAIkpD,EAAUtqD,KAAKuqD,IAAIjwC,MAAMlZ,KAExCkpD,EAAUroD,UAAUyb,GAAK,SAAUotC,GAC/B,OAAO9qD,KAAKuqD,IAAI7sC,GAAG04B,EAAa0U,GAAOP,MAE3CD,EAAUroD,UAAUqb,GAAK,SAAUwtC,GAC/B,OAAO9qD,KAAKuqD,IAAIjtC,GAAG84B,EAAa0U,GAAOP,MAE3CD,EAAUroD,UAAUub,IAAM,SAAUstC,GAChC,OAAO9qD,KAAKuqD,IAAI/sC,IAAI44B,EAAa0U,GAAOP,MAE5CD,EAAUroD,UAAUib,GAAK,SAAU4tC,GAC/B,OAAO9qD,KAAKuqD,IAAIrtC,GAAGk5B,EAAa0U,GAAOP,MAE3CD,EAAUroD,UAAUmb,IAAM,SAAU0tC,GAChC,OAAO9qD,KAAKuqD,IAAIntC,IAAIg5B,EAAa0U,GAAOP,MAE5CD,EAAUroD,UAAUuL,OAAS,WACzB,OAAOxN,KAAKuqD,IAAI/8C,UAEpB88C,EAAUroD,UAAU0L,SAAW,WAC3B,IACI,OAAO3N,KAAKuqD,IAAI58C,WAEpB,MAAO++B,GACHS,EAAOqC,WAAW,WAAYrC,EAAOsd,cAAe,CAAEtP,UAAW,WAAYuP,MAAO,WAAYE,QAASle,EAAMlN,UAEnH,OAAO,MAEX8qB,EAAUroD,UAAUmJ,SAAW,WAC3B,OAAOpL,KAAKuqD,IAAIn/C,SAAS,KAE7Bk/C,EAAUroD,UAAU8oD,YAAc,WAC9B,IAAI1iD,EAAMrI,KAAKuqD,IAAIn/C,SAAS,IAI5B,OAHI/C,EAAIrH,OAAS,IACbqH,EAAM,IAAMA,GAET,KAAOA,GAEXiiD,EAlHmB,GAqH9B,SAASD,EAAYjpD,GACjB,OAAQA,EAAMmpD,KAAOnpD,EAAMmpD,IAAIx+C,IAGnC,SAASqqC,EAAah1C,GAClB,OAAIgpD,EAAahpD,GACNA,EAEJ,IAAIkpD,EAAUlpD,GATzB3B,EAAQ6qD,UAAYA,EAIpB7qD,EAAQ4qD,YAAcA,EAOtB5qD,EAAQ22C,aAAeA,EACvB32C,EAAQ+qD,oBAAsBpU,GAAc,GAC5C32C,EAAQyvC,aAAekH,EAAa,GACpC32C,EAAQurD,YAAc5U,EAAa,GACnC32C,EAAQwrD,YAAc7U,EAAa,GACnC32C,EAAQyrD,oBAAsB9U,EAAa,IAAI+T,EAAQD,QAAQzgD,GAAG,yBAEhE,CAAC6oC,kBAAkB,GAAGsW,YAAY,GAAG9hC,QAAQ,IAAIqkC,GAAG,CAAC,SAASzqD,EAAQhB,EAAOD,GAC/E,aAKA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI+rC,EAASzsC,EAAQ,YACrB,SAAS2pD,EAAYjpD,GACjB,QAASA,EAAMmpD,IAEnB,SAASa,EAASvqB,GACd,OAAIA,EAAM9+B,QAGV8+B,EAAM9+B,MAAQ,WACV,IAAIyjC,EAAOxjC,MAAMC,UAAUF,MAAMhB,KAAKymB,WACtC,OAAO,IAAIrlB,WAAWH,MAAMC,UAAUF,MAAM0lB,MAAMoZ,EAAO2E,MAJlD3E,EAQf,SAASgqB,EAAWzpD,GAChB,IAAKA,GAASC,SAASD,EAAMJ,SAAWI,EAAMJ,QAA6B,iBAAZ,EAC3D,OAAO,EAEX,IAAK,IAAIL,EAAI,EAAGA,EAAIS,EAAMJ,OAAQL,IAAK,CACnC,IAAIiD,EAAIxC,EAAMT,GACd,GAAIiD,EAAI,GAAU,KAALA,GAAYvC,SAASuC,IAAMA,EACpC,OAAO,EAGf,OAAO,EAGX,SAASyoC,EAASjrC,GAOd,GANa,MAATA,GACA+rC,EAAOqC,WAAW,qCAAsCrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAExGipD,EAAYjpD,KACZA,EAAQA,EAAM2pD,eAEK,iBAAZ,EAAsB,CAC7B,IAAIvG,EAAQpjD,EAAMojD,MAAM,uBACnBA,GACDrX,EAAOqC,WAAW,6BAA8BrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAEnF,OAAbojD,EAAM,IACNrX,EAAOqC,WAAW,iCAAkCrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,KAExGA,EAAQA,EAAMqyC,UAAU,IACdzyC,OAAS,IACfI,EAAQ,IAAMA,GAGlB,IADA,IAAI4B,EAAS,GACJrC,EAAI,EAAGA,EAAIS,EAAMJ,OAAQL,GAAK,EACnCqC,EAAOI,KAAK/B,SAASD,EAAMiC,OAAO1C,EAAG,GAAI,KAE7C,OAAOyqD,EAAS,IAAIjpD,WAAWa,IAInC,OAAI6nD,EAAWzpD,GACJgqD,EAAS,IAAIjpD,WAAWf,KAEnC+rC,EAAOqC,WAAW,yBAA0B,KAAM,CAAE/tC,IAAK,QAASL,MAAOA,EAAO8hB,YAAa,IACtF,MA+CX,SAASixB,EAAY/yC,EAAOJ,GACxB,QAAuB,iBAAZ,IAAyBI,EAAMojD,MAAM,wBAG5CxjD,GAAUI,EAAMJ,SAAW,EAAI,EAAIA,GAnF3CvB,EAAQorD,WAAaA,EAkCrBprD,EAAQ4sC,SAAWA,EAiBnB5sC,EAAQ6mB,OAhBR,SAAgB+kC,GAGZ,IAFA,IAAIC,EAAS,GACTtqD,EAAS,EACJL,EAAI,EAAGA,EAAI0qD,EAAQrqD,OAAQL,IAAK,CACrC,IAAIwtC,EAAS9B,EAASgf,EAAQ1qD,IAC9B2qD,EAAOloD,KAAK+qC,GACZntC,GAAUmtC,EAAOntC,OAErB,IAAIgC,EAAS,IAAIb,WAAWnB,GACxB+/B,EAAS,EACb,IAASpgC,EAAI,EAAGA,EAAI2qD,EAAOtqD,OAAQL,IAC/BqC,EAAOL,IAAI2oD,EAAO3qD,GAAIogC,GACtBA,GAAUuqB,EAAO3qD,GAAGK,OAExB,OAAOoqD,EAASpoD,IAmBpBvD,EAAQ4/C,WAhBR,SAAoBj+C,GAChB,IAAI4B,EAASqpC,EAASjrC,GACtB,GAAsB,IAAlB4B,EAAOhC,OACP,OAAOgC,EAIX,IADA,IAAIsH,EAAQ,EACa,IAAlBtH,EAAOsH,IACVA,IAMJ,OAHIA,IACAtH,EAASA,EAAOjB,MAAMuI,IAEnBtH,GAYXvD,EAAQ6mD,SATR,SAAkBllD,EAAOJ,GAErB,GAAIA,GADJI,EAAQirC,EAASjrC,IACEJ,OACf,MAAM,IAAIJ,MAAM,cAEpB,IAAIoC,EAAS,IAAIb,WAAWnB,GAE5B,OADAgC,EAAOL,IAAIvB,EAAOJ,EAASI,EAAMJ,QAC1BoqD,EAASpoD,IAYpBvD,EAAQ00C,YAAcA,EACtB,IAAIoX,EAAgB,mBAEpB,SAAS1U,EAAQz1C,GACb,GAAIipD,EAAYjpD,GACZ,OAAOA,EAAM2pD,cAEjB,GAAuB,iBAAZ,EAAsB,CACzB3pD,EAAQ,GACR+rC,EAAOqC,WAAW,gCAAiCrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAGvG,IADA,IAAIiH,EAAM,GACHjH,GACHiH,EAAMkjD,EAAsB,GAARnqD,GAAgBiH,EACpCjH,EAAQqJ,KAAKi2C,MAAMt/C,EAAQ,IAE/B,OAAIiH,EAAIrH,QACAqH,EAAIrH,OAAS,IACbqH,EAAM,IAAMA,GAET,KAAOA,GAEX,OAEX,GAAuB,iBAAZ,EAAsB,CAC7B,IAAIm8C,EAAQpjD,EAAMojD,MAAM,uBAUxB,OATKA,GACDrX,EAAOqC,WAAW,6BAA8BrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAEnF,OAAbojD,EAAM,IACNrX,EAAOqC,WAAW,iCAAkCrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAEpGA,EAAMJ,OAAS,IACfI,EAAQ,MAAQA,EAAMqyC,UAAU,IAE7BryC,EAEX,GAAIypD,EAAWzpD,GAAQ,CAEnB,IADA,IAAI4B,EAAS,GACJrC,EAAI,EAAGA,EAAIS,EAAMJ,OAAQL,IAAK,CACnC,IAAIiD,EAAIxC,EAAMT,GACdqC,EAAOI,KAAKmoD,GAAmB,IAAJ3nD,IAAa,GAAK2nD,EAAkB,GAAJ3nD,IAE/D,MAAO,KAAOZ,EAAOU,KAAK,IAG9B,OADAypC,EAAOqC,WAAW,wBAAyB,KAAM,CAAE/tC,IAAK,QAASL,MAAOA,IACjE,QAEX3B,EAAQo3C,QAAUA,EAUlBp3C,EAAQq3C,cATR,SAAuB11C,GAInB,IAHK+yC,EAAY/yC,IACb+rC,EAAOqC,WAAW,qBAAsBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAEtE,EAAfA,EAAMJ,QAAwC,QAA1BI,EAAMqyC,UAAU,EAAG,IAC1CryC,EAAQ,KAAOA,EAAMqyC,UAAU,GAEnC,OAAOryC,GAYX3B,EAAQ+rD,WATR,SAAoBpqD,EAAOJ,GAIvB,IAHKmzC,EAAY/yC,IACb+rC,EAAOqC,WAAW,qBAAsBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAErFA,EAAMJ,OAAS,EAAIA,EAAS,GAC/BI,EAAQ,MAAQA,EAAMqyC,UAAU,GAEpC,OAAOryC,GAwBX3B,EAAQgsD,eAfR,SAAwB35B,GACpB,IAAIvuB,EAAQ8oC,EAASva,GACrB,GAAqB,KAAjBvuB,EAAMvC,OACN,MAAM,IAAIJ,MAAM,qBAEpB,IAAIgD,EAAIL,EAAM,IAId,OAHU,KAANK,GAAkB,KAANA,IACZA,EAAI,GAAMA,EAAI,GAEX,CACHvD,EAAGw2C,EAAQtzC,EAAMxB,MAAM,EAAG,KAC1BzB,EAAGu2C,EAAQtzC,EAAMxB,MAAM,GAAI,KAC3B6B,EAAGA,KAKT,CAACilD,WAAW,KAAK6C,GAAG,CAAC,SAAShrD,EAAQhB,EAAOD,GAC/C,aAqCA,SAAS+vC,EAAWhQ,EAAS3+B,EAAMktC,GAC1BltC,IACDA,EAAOpB,EAAQi6C,eAEd3L,IACDA,EAAS,IAEb,IAAI4d,EAAiB,GACrBxmD,OAAO0rC,KAAK9C,GAAQO,QAAQ,SAAUppC,GAClC,IACIymD,EAAevoD,KAAK8B,EAAM,IAAM2lB,KAAKosB,UAAUlJ,EAAO7oC,KAE1D,MAAOwnC,GACHif,EAAevoD,KAAK8B,EAAM,IAAM2lB,KAAKosB,UAAUlJ,EAAO7oC,GAAKkG,gBAGnE,IAAI2nB,EAASyM,EACTmsB,EAAe3qD,SACfw+B,GAAW,KAAOmsB,EAAejoD,KAAK,MAAQ,KAGlD,IAAIgpC,EAAQ,IAAI9rC,MAAM4+B,GAMtB,MALAkN,EAAM3Z,OAASA,EACf2Z,EAAM7rC,KAAOA,EACbsE,OAAO0rC,KAAK9C,GAAQO,QAAQ,SAAUppC,GAClCwnC,EAAMxnC,GAAO6oC,EAAO7oC,KAElBwnC,EA/DVvnC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAEtD3B,EAAQi6C,cAAgB,gBAExBj6C,EAAQ68C,gBAAkB,kBAG1B78C,EAAQmsD,YAAc,cAEtBnsD,EAAQgwC,eAAiB,iBASzBhwC,EAAQ20C,iBAAmB,mBAK3B30C,EAAQ40C,iBAAmB,mBAI3B50C,EAAQ+0C,oBAAsB,sBAI9B/0C,EAAQgrD,cAAgB,gBAGxBhrD,EAAQy7C,sBAAwB,wBA+BhCz7C,EAAQ+vC,WAAaA,EAMrB/vC,EAAQixC,SALR,SAAkB3wC,EAAM8rD,GACd9rD,aAAgB8rD,GAClBrc,EAAW,cAAe/vC,EAAQmsD,YAAa,CAAE9pD,KAAM+pD,EAAK/pD,SAKlE,IAAIgqD,GAAG,CAAC,SAASprD,EAAQhB,EAAOD,GAClC,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI2qD,EAAQlf,EAAansC,EAAQ,YAC7BurC,EAAYvrC,EAAQ,aACpBq0B,EAAQg3B,EAAY,KACpBC,EAAUD,EAAc,OACxBE,EAAUF,EAAc,OAQ5BtsD,EAAQysD,iBANR,SAA0BhnD,GAItB,OAHKA,EAAY,SACbA,EAAM+mC,EAAUI,SAASnnC,IAEtB6vB,EAAMi3B,EAAS9mD,IAS1BzF,EAAQ0sD,iBANR,SAA0BjnD,GAItB,OAHKA,EAAY,SACbA,EAAM+mC,EAAUI,SAASnnC,IAEtB6vB,EAAMk3B,EAAS/mD,KAIxB,CAAC0jD,YAAY,GAAGj5B,UAAU,KAAKy8B,GAAG,CAAC,SAAS1rD,EAAQhB,EAAOD,GAC7D,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI+xC,EAAczyC,EAAQ,eACtB0yC,EAAS1yC,EAAQ,UAIrBjB,EAAQ48C,GAHR,SAAYt5C,GACR,OAAOowC,EAAYwC,UAAUvC,EAAOwC,YAAY7yC,MAIlD,CAAC+mD,cAAc,GAAGhB,SAAS,KAAKuD,GAAG,CAAC,SAAS3rD,EAAQhB,EAAOD,GAC9D,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAGtD,IAAI4rC,EAAYtsC,EAAQ,aACpBwyC,EAAcxyC,EAAQ,eACtB4rD,EAASzf,EAAansC,EAAQ,aAC9B6rD,EAAY1f,EAAansC,EAAQ,gBACjC8rD,EAAU3f,EAAansC,EAAQ,cAC/B+rD,EAAO/rD,EAAQ,QACfyyC,EAAczyC,EAAQ,eACtBi9C,EAAaj9C,EAAQ,cACrBgsD,EAAO7f,EAAansC,EAAQ,WAC5BisD,EAAW9f,EAAansC,EAAQ,eAChCksD,EAAiBlsD,EAAQ,kBAEzBmsD,EAAMhgB,EAAansC,EAAQ,UAC3B4H,EAAOukC,EAAansC,EAAQ,WAC5BosD,EAAQjgB,EAAansC,EAAQ,YAC7Bi2C,EAAQj2C,EAAQ,SACpBjB,EAAQyqD,QAAU,CACdzB,SAAUvV,EAAYuV,SACtBhU,gBAAiBvB,EAAYuB,gBAC7BwB,eAAgB/C,EAAY+C,eAC5B4W,IAAKA,EACLlV,UAAWhB,EAAMgB,UAKjBoV,YAAa,IACb1gB,SAAUmgB,EAAQngB,SAClB/lB,OAAQkmC,EAAQlmC,OAChBggC,SAAUkG,EAAQlG,SAClBjH,WAAYmN,EAAQnN,WACpBiN,OAAQA,EACRlW,aAAcmW,EAAUnW,aACxBkU,UAAWiC,EAAUjC,UACrBzT,QAAS2V,EAAQ3V,QACjBjB,YAAattC,EAAKstC,YAClBuN,aAAc76C,EAAK66C,aACnBL,SAAUnF,EAAWmF,SACrBzG,GAAIoQ,EAAKpQ,GACThN,WAAYrC,EAAUqC,WACtB8C,mBAAoBnF,EAAUmF,mBAC9B6a,YAAaF,EAAME,YACnBC,WAAYH,EAAMG,WAClBC,YAAaJ,EAAMI,YACnBC,WAAYL,EAAMK,WAClBxX,UAAWxC,EAAYwC,UACvBtmB,OAAQq9B,EAAKr9B,OACb3N,YAAakrC,EAAelrC,YAC5B0rC,aAAcT,EAASxF,KACvBkG,kBAAmBV,EAAShX,UAC5B2X,eAAgBX,EAASt9B,OACzBo8B,eAAgBe,EAAQf,iBAG1B,CAAC8B,cAAc,GAAG7E,YAAY,GAAG8E,WAAW,GAAG7E,cAAc,GAAGC,YAAY,GAAG6E,OAAO,GAAG3D,cAAc,GAAG4D,aAAa,GAAGC,iBAAiB,GAAG5D,QAAQ,GAAG6D,SAAS,GAAGC,aAAa,GAAGC,UAAU,GAAGhF,SAAS,GAAGiF,QAAQ,KAAKC,GAAG,CAAC,SAASttD,EAAQhB,EAAOD,GACzP,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI6sD,EAAOvtD,EAAQ,WACfurC,EAAYvrC,EAAQ,aAIxBjB,EAAQk2C,UAHR,SAAmBjtC,GACf,MAAO,KAAOulD,EAAKC,WAAWjiB,EAAUI,SAAS3jC,MAInD,CAACkgD,YAAY,GAAGuF,UAAU,KAAKC,GAAG,CAAC,SAAS1tD,EAAQhB,EAAOD,GAC7D,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI6qC,EAAYvrC,EAAQ,aACpB0yC,EAAS1yC,EAAQ,UACjByyC,EAAczyC,EAAQ,eACtB2tD,EAAQ,IAAIlsD,WAAW,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACrHmsD,EAAY,IAAIlK,OAAO,uBACvBmK,EAAoB,IAAInK,OAAO,iBAmBnC3kD,EAAQqjD,SAlBR,SAAkBhhD,GAMd,KALAA,EAAOA,EAAK+pC,eAKF2Y,MAAM+J,GACZ,MAAM,IAAI3tD,MAAM,iDAGpB,IADA,IAAIoC,EAASqrD,EACNvsD,EAAKd,QAAQ,CAChB,IAAIwtD,EAAY1sD,EAAK0iD,MAAM8J,GACvBG,EAAQrb,EAAOwC,YAAY4Y,EAAU,IACzCxrD,EAASmwC,EAAYwC,UAAU1J,EAAU3lB,OAAO,CAACtjB,EAAQmwC,EAAYwC,UAAU8Y,MAC/E3sD,EAAO0sD,EAAU,IAAM,GAE3B,OAAOviB,EAAU4K,QAAQ7zC,KAI3B,CAAC4lD,YAAY,GAAGkB,cAAc,GAAGhB,SAAS,KAAK4F,GAAG,CAAC,SAAShuD,EAAQhB,EAAOD,GAC7E,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI6qC,EAAYvrC,EAAQ,aAuCxBjB,EAAQkvD,OAtCR,SAAgBnnB,EAAUC,EAAMmnB,EAAYC,EAAQC,GAGhD,IAAIC,EAFJvnB,EAAWyE,EAAUI,SAAS7E,GAC9BC,EAAOwE,EAAUI,SAAS5E,GAE1B,IAKIpnC,EACA2uD,EANAluD,EAAI,EACJmuD,EAAK,IAAI9sD,WAAW0sD,GACpBK,EAAS,IAAI/sD,WAAWslC,EAAKzmC,OAAS,GAC1CkuD,EAAOvsD,IAAI8kC,GAIX,IAAK,IAAI9mC,EAAI,EAAGA,GAAKG,EAAGH,IAAK,CAEzBuuD,EAAOznB,EAAKzmC,QAAWL,GAAK,GAAM,IAClCuuD,EAAOznB,EAAKzmC,OAAS,GAAML,GAAK,GAAM,IACtCuuD,EAAOznB,EAAKzmC,OAAS,GAAML,GAAK,EAAK,IACrCuuD,EAAOznB,EAAKzmC,OAAS,GAAS,IAAJL,EAC1B,IAAIwuD,EAAIL,EAAWtnB,GAAUtS,OAAOg6B,GAAQ/5B,SACvC45B,IACDA,EAAOI,EAAEnuD,OACTguD,EAAI,IAAI7sD,WAAW4sD,GAEnB1uD,EAAIwuD,IADJ/tD,EAAI2J,KAAKgB,KAAKojD,EAASE,IACL,GAAKA,GAG3BC,EAAErsD,IAAIwsD,GACN,IAAK,IAAIzoD,EAAI,EAAGA,EAAIkoD,EAAYloD,IAAK,CACjCyoD,EAAIL,EAAWtnB,GAAUtS,OAAOi6B,GAAGh6B,SACnC,IAAK,IAAIjoB,EAAI,EAAGA,EAAI6hD,EAAM7hD,IACtB8hD,EAAE9hD,IAAMiiD,EAAEjiD,GAElB,IAAIu7B,GAAW9nC,EAAI,GAAKouD,EACpBvkD,EAAO7J,IAAMG,EAAIT,EAAI0uD,EAEzBE,EAAGtsD,IAAIspC,EAAUI,SAAS2iB,GAAGjtD,MAAM,EAAGyI,GAAMi+B,GAEhD,OAAOwD,EAAUI,SAAS4iB,KAI5B,CAACrG,YAAY,KAAKwG,GAAG,CAAC,SAAS1uD,EAAQhB,EAAOD,GAChD,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAQtD3B,EAAQmxC,eAPR,SAAwBzC,EAAQrsC,EAAMV,GAClC+D,OAAOC,eAAe+oC,EAAQrsC,EAAM,CAChCqtB,YAAY,EACZ/tB,MAAOA,EACPo9B,UAAU,KAWlB/+B,EAAQu0C,aAPR,SAAsB7F,EAAQrsC,EAAMV,GAChC,IAAIiuD,EAASxkC,KAAKosB,UAAU71C,GAC5B+D,OAAOC,eAAe+oC,EAAQrsC,EAAM,CAChCqtB,YAAY,EACZC,IAAK,WAAc,OAAOvE,KAAKC,MAAMukC,OAgB7C5vD,EAAQ6vD,uBAZR,SAAgCnhB,EAAQrsC,EAAMV,GAC1C,IAAImuD,EAASnuD,EACTouD,EAAS,SAAUpuD,GACnBmuD,EAASnuD,GAOb,OALA+D,OAAOC,eAAe+oC,EAAQrsC,EAAM,CAChCqtB,YAAY,EACZC,IAAK,WAAc,OAAOmgC,GAC1B5sD,IAAK6sD,IAEFA,GAmBX/vD,EAAQ6vC,kBAhBR,SAA2BnB,GACvB,IAAInrC,EAAS,GACT2rC,EAAW,GAUf,OATAxpC,OAAO0rC,KAAK1C,GAAQG,QAAQ,SAAUppC,GAClC,IAAI9D,EAAQ+sC,EAAOjpC,GACf9D,aAAiBwtC,QACjBD,EAASvrC,KAAKhC,EAAM6tC,KAAK,SAAU7tC,GAAS4B,EAAOkC,GAAO9D,KAG1D4B,EAAOkC,GAAO9D,IAGfwtC,QAAQC,IAAIF,GAAUM,KAAK,WAC9B,OAAOd,MAKb,IAAIshB,GAAG,CAAC,SAAS/uD,EAAQhB,EAAOD,GAClC,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI6qC,EAAYvrC,EAAQ,aAwBxBjB,EAAQiiB,YARR,SAAqB1gB,GACjB,GAAIA,GAAU,GAAc,KAATA,GAAiBK,SAASL,IAAWA,EACpD,MAAM,IAAIJ,MAAM,kBAEpB,IAAIoC,EAAS,IAAIb,WAAWnB,GAE5B,OAnBJ,SAAyBW,GACrB,IAAK,IAAI2W,EAAQ,EAAGA,EAAQ,GAAIA,IAC5B,IAAK,IAAI3X,EAAI,EAAGA,EAAIgB,EAAOX,OAAQL,IAC3B2X,EACA3W,EAAOhB,IAAM8J,KAAKi2C,MAAM,IAAMj2C,KAAK4/B,UAGnC1oC,EAAOhB,GAAK8J,KAAKi2C,MAAM,IAAMj2C,KAAK4/B,UAW9CH,CAAgBlnC,GACTipC,EAAUI,SAASrpC,KAK5B,CAAC4lD,YAAY,KAAK8G,GAAG,CAAC,SAAShvD,EAAQhB,EAAOD,GAChD,aAEA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI6qC,EAAYvrC,EAAQ,aACxB,SAASivD,EAAgBvuD,GAErB,IADA,IAAI4B,EAAS,GACN5B,GACH4B,EAAO4sD,QAAgB,IAARxuD,GACfA,IAAU,EAEd,OAAO4B,EAEX,SAAS6sD,EAAkBnnD,EAAMq4B,EAAQ//B,GAErC,IADA,IAAIgC,EAAS,EACJrC,EAAI,EAAGA,EAAIK,EAAQL,IACxBqC,EAAmB,IAATA,EAAgB0F,EAAKq4B,EAASpgC,GAE5C,OAAOqC,EAkCX,SAAS8sD,EAAgBpnD,EAAMq4B,EAAQgvB,EAAa/uD,GAEhD,IADA,IAAIgC,EAAS,GACN+sD,EAAchvB,EAAS,EAAI//B,GAAQ,CACtC,IAAIgvD,EAAUC,EAAQvnD,EAAMqnD,GAG5B,GAFA/sD,EAAOI,KAAK4sD,EAAQhtD,QAEF+9B,EAAS,EAAI//B,GAD/B+uD,GAAeC,EAAQ7J,UAEnB,MAAM,IAAIvlD,MAAM,eAGxB,MAAO,CAAEulD,SAAW,EAAInlD,EAASgC,OAAQA,GAG7C,SAASitD,EAAQvnD,EAAMq4B,GACnB,GAAoB,IAAhBr4B,EAAK1H,OACL,MAAM,IAAIJ,MAAM,oBAGpB,GAAoB,KAAhB8H,EAAKq4B,GAAiB,CAEtB,GAAIA,EAAS,GADTmvB,EAAexnD,EAAKq4B,GAAU,KACFr4B,EAAK1H,OACjC,MAAM,IAAIJ,MAAM,aAGpB,GAAImgC,EAAS,EAAImvB,GADblvD,EAAS6uD,EAAkBnnD,EAAMq4B,EAAS,EAAGmvB,IACRxnD,EAAK1H,OAC1C,MAAM,IAAIJ,MAAM,YAEpB,OAAOkvD,EAAgBpnD,EAAMq4B,EAAQA,EAAS,EAAImvB,EAAcA,EAAelvD,GAE9E,GAAoB,KAAhB0H,EAAKq4B,GAAiB,CAE3B,GAAIA,EAAS,GADT//B,EAAS0H,EAAKq4B,GAAU,KACFr4B,EAAK1H,OAC3B,MAAM,IAAIJ,MAAM,oBAEpB,OAAOkvD,EAAgBpnD,EAAMq4B,EAAQA,EAAS,EAAG//B,GAEhD,GAAoB,KAAhB0H,EAAKq4B,GAAiB,CAC3B,IAAImvB,EACJ,GAAInvB,EAAS,GADTmvB,EAAexnD,EAAKq4B,GAAU,KACFr4B,EAAK1H,OACjC,MAAM,IAAIJ,MAAM,oBAGpB,GAAImgC,EAAS,EAAImvB,GADblvD,EAAS6uD,EAAkBnnD,EAAMq4B,EAAS,EAAGmvB,IACRxnD,EAAK1H,OAC1C,MAAM,IAAIJ,MAAM,oBAGpB,MAAO,CAAEulD,SAAW,EAAI+J,EAAelvD,EAASgC,OADnCipC,EAAU4K,QAAQnuC,EAAK3G,MAAMg/B,EAAS,EAAImvB,EAAcnvB,EAAS,EAAImvB,EAAelvD,KAGhG,GAAoB,KAAhB0H,EAAKq4B,GAAiB,CAC3B,IAAI//B,EACJ,GAAI+/B,EAAS,GADT//B,EAAS0H,EAAKq4B,GAAU,KACFr4B,EAAK1H,OAC3B,MAAM,IAAIJ,MAAM,oBAGpB,MAAO,CAAEulD,SAAW,EAAInlD,EAASgC,OADpBipC,EAAU4K,QAAQnuC,EAAK3G,MAAMg/B,EAAS,EAAGA,EAAS,EAAI//B,KAGvE,MAAO,CAAEmlD,SAAU,EAAGnjD,OAAQipC,EAAU4K,QAAQnuC,EAAKq4B,KAzDzDthC,EAAQwmB,OAHR,SAAgBkoB,GACZ,OAAOlC,EAAU4K,QA7BrB,SAAS3wB,EAAQioB,GACb,GAAInsC,MAAME,QAAQisC,GAAS,CACvB,IAAIoN,EAAU,GAId,OAHApN,EAAOG,QAAQ,SAAU2W,GACrB1J,EAAUA,EAAQj1B,OAAOJ,EAAQ++B,MAEjC1J,EAAQv6C,QAAU,IAClBu6C,EAAQqU,QAAQ,IAAOrU,EAAQv6C,QACxBu6C,KAEPv6C,EAAS2uD,EAAgBpU,EAAQv6C,SAC9B4uD,QAAQ,IAAO5uD,EAAOA,QACtBA,EAAOslB,OAAOi1B,IAGrB,IAQIv6C,EARA0H,EAAO1G,MAAMC,UAAUF,MAAMhB,KAAKkrC,EAAUI,SAAS8B,IACzD,OAAoB,IAAhBzlC,EAAK1H,QAAgB0H,EAAK,IAAM,IACzBA,EAEFA,EAAK1H,QAAU,IACpB0H,EAAKknD,QAAQ,IAAOlnD,EAAK1H,QAClB0H,KAEP1H,EAAS2uD,EAAgBjnD,EAAK1H,SAC3B4uD,QAAQ,IAAO5uD,EAAOA,QACtBA,EAAOslB,OAAO5d,IAIAwd,CAAQioB,KAqErC1uC,EAAQysC,OARR,SAAgBxjC,GACZ,IAAInF,EAAQ0oC,EAAUI,SAAS3jC,GAC3BsnD,EAAUC,EAAQ1sD,EAAO,GAC7B,GAAIysD,EAAQ7J,WAAa5iD,EAAMvC,OAC3B,MAAM,IAAIJ,MAAM,oBAEpB,OAAOovD,EAAQhtD,SAIjB,CAAC4lD,YAAY,KAAKuH,GAAG,CAAC,SAASzvD,EAAQhB,EAAOD,GAChD,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI2qD,EAAQlf,EAAansC,EAAQ,YAC7BurC,EAAYvrC,EAAQ,aACpBsrD,EAAUD,EAAc,OACxBE,EAAUF,EAAc,OAI5BtsD,EAAQ4vB,OAHR,SAAgB3mB,GACZ,MAAO,KAAQsjD,IAAU92B,OAAO+W,EAAUI,SAAS3jC,IAAOysB,OAAO,QAMrE11B,EAAQ8vB,OAHR,SAAgB7mB,GACZ,MAAO,KAAQujD,IAAU/2B,OAAO+W,EAAUI,SAAS3jC,IAAOysB,OAAO,SAInE,CAACyzB,YAAY,GAAGj5B,UAAU,KAAKygC,GAAG,CAAC,SAAS1vD,EAAQhB,EAAOD,GAC7D,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI6rC,EAAcvsC,EAAQ,eACtBurC,EAAYvrC,EAAQ,aACpB0yC,EAAS1yC,EAAQ,UACjByyC,EAAczyC,EAAQ,eACtB2vD,EAAS3vD,EAAQ,UACjB4vD,EAAa,IAAIlM,OAAO,mBACxBmM,EAAc,IAAInM,OAAO,qBACzBoM,EAAa,IAAIpM,OAAO,wBACxBiK,EAAQ,mEA+DZ,SAASlH,EAAK5T,EAAO8T,GACjB,GAAI9T,EAAMvyC,QAAUqmD,EAAOrmD,OACvB,MAAM,IAAIJ,MAAM,6BAEpB,IAAI6vD,EAAQ,GAIZ,OAHAld,EAAMjF,QAAQ,SAAUprB,EAAMzd,GAC1BgrD,EAAMrtD,KApEd,SAASstD,EAAMxtC,EAAM9hB,EAAOc,GACxB,OAAQghB,GACJ,IAAK,UACD,OAAIhhB,EACO+pC,EAAUqa,SAASllD,EAAO,IAE9B6qC,EAAUI,SAASjrC,GAC9B,IAAK,SACD,OAAOgyC,EAAOwC,YAAYx0C,GAC9B,IAAK,QACD,OAAO6qC,EAAUI,SAASjrC,GAC9B,IAAK,OAED,OADAA,EAASA,EAAQ,OAAS,OACtBc,EACO+pC,EAAUqa,SAASllD,EAAO,IAE9B6qC,EAAUI,SAASjrC,GAElC,IAAIojD,EAAQthC,EAAKshC,MAAM+L,GACvB,GAAI/L,EAAO,CAGP,IADIj4C,EAAOlL,SAASmjD,EAAM,IAAM,QACpB,GAAK,GAAe,IAATj4C,GAAqB,IAAPA,EACjC,MAAM,IAAI3L,MAAM,yBAA2BsiB,GAM/C,OAJIhhB,IACAqK,EAAO,KAEXnL,EAAQ6rC,EAAYmJ,aAAah1C,GAAO0N,OAAOvC,GACxC0/B,EAAUqa,SAASllD,EAAOmL,EAAO,GAG5C,GADAi4C,EAAQthC,EAAKshC,MAAM8L,GACR,CACP,IAAI/jD,EAAOlL,SAASmjD,EAAM,IAC1B,GAAIhhD,OAAO+I,IAASi4C,EAAM,IAAe,IAATj4C,GAAqB,GAAPA,EAC1C,MAAM,IAAI3L,MAAM,yBAA2BsiB,GAE/C,GAAI+oB,EAAUI,SAASjrC,GAAO6M,aAAe1B,EACzC,MAAM,IAAI3L,MAAM,qBAAuBsiB,GAE3C,OAAIhhB,EACO+pC,EAAUI,UAAUjrC,EAAQitD,GAAO5a,UAAU,EAAG,KAEpDryC,EAGX,GADAojD,EAAQthC,EAAKshC,MAAMgM,GACR,CACP,IAAIG,EAAWnM,EAAM,GAErB,GADYnjD,SAASmjD,EAAM,IAAMpjD,EAAMJ,SAC1BI,EAAMJ,OACf,MAAM,IAAIJ,MAAM,qBAAuBsiB,GAE3C,IAAIlgB,EAAS,GAKb,OAJA5B,EAAMktC,QAAQ,SAAUltC,GACpBA,EAAQsvD,EAAMC,EAAUvvD,GAAO,GAC/B4B,EAAOI,KAAKhC,KAET6qC,EAAU3lB,OAAOtjB,GAE5B,MAAM,IAAIpC,MAAM,kBAAoBsiB,GASrBwtC,CAAMxtC,EAAMmkC,EAAO5hD,OAE3BwmC,EAAU4K,QAAQ5K,EAAU3lB,OAAOmqC,IAE9ChxD,EAAQ0nD,KAAOA,EAIf1nD,EAAQk2C,UAHR,SAAmBpC,EAAO8T,GACtB,OAAOlU,EAAYwC,UAAUwR,EAAK5T,EAAO8T,KAM7C5nD,EAAQ4vB,OAHR,SAAgBkkB,EAAO8T,GACnB,OAAOgJ,EAAOhhC,OAAO83B,EAAK5T,EAAO8T,MAInC,CAACsB,cAAc,GAAGC,YAAY,GAAGkB,cAAc,GAAG8D,SAAS,GAAG9E,SAAS,KAAK8H,GAAG,CAAC,SAASlwD,EAAQhB,EAAOD,GAC1G,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI6rC,EAAcvsC,EAAQ,eACtBysC,EAASN,EAAansC,EAAQ,aAC9B4yC,EAAQ,CACR,MACA,OACA,OACA,OACA,QACA,QACA,SAEAud,EAAc,WACd,IAAIC,EAAY,GAChB,SAASD,EAAYzvD,GACjB,MAAO,CACH2vD,SAAU3vD,EAAMJ,OAAS,EACzBgwD,SAAU/jB,EAAYmJ,aAAah1C,IAI3C,IAAIA,EAAQ,IAOZ,OANAkyC,EAAMhF,QAAQ,SAAUxsC,GACpB,IAAIiyC,EAAO8c,EAAYzvD,GACvB0vD,EAAUhvD,EAAK+pC,eAAiBkI,EAChC+c,EAAUttD,OAAOuwC,EAAKgd,WAAahd,EACnC3yC,GAAS,QAEN,SAAUU,GAEb,IAAIiyC,EAAO+c,EAAUttD,OAAO1B,GAAM+pC,eAClC,IAAKkI,GAA0B,iBAAX,GAAuBtpC,KAAKi2C,MAAM5+C,IAASA,GAAgB,GAARA,GAAaA,GAAQ,IAAK,CAE7F,IADA,IAAIV,EAAQ,IACHT,EAAI,EAAGA,EAAImB,EAAMnB,IACtBS,GAAS,IAEb2yC,EAAO8c,EAAYzvD,GAMvB,OAHK2yC,GACD5G,EAAOqC,WAAW,mBAAoBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,OAAQL,MAAOU,IAElFiyC,GA9BG,GAiClB,SAASmZ,EAAY9rD,EAAO6vD,EAAUjiC,GAQ7BA,IACDA,EAAU,IAEd,IAAIkiC,EAAWL,EAAYI,GAGvBnnD,GADJ1I,EAAQ6rC,EAAYmJ,aAAah1C,IACZkc,GAAG2vB,EAAYiC,cAChCplC,IACA1I,EAAQA,EAAMwJ,IAAIqiC,EAAYud,sBAGlC,IADA,IAAI2G,EAAW/vD,EAAM2K,IAAImlD,EAASF,UAAU5lD,SAAS,IAC9C+lD,EAASnwD,OAASkwD,EAASH,UAC9BI,EAAW,IAAMA,EAGhBniC,EAAQvmB,MACT0oD,EAAWA,EAAS3M,MAAM,wBAAwB,IAEtD,IAAI4M,EAAQhwD,EAAM8Z,IAAIg2C,EAASF,UAAU5lD,SAAS,IAQlD,OAPI4jB,EAAQqiC,UACRD,EAAQA,EAAM/lD,QAAQ,wBAAyB,MAEnDjK,EAAQgwD,EAAQ,IAAMD,EAClBrnD,IACA1I,EAAQ,IAAMA,GAEXA,EAGX,SAAS+rD,EAAW/rD,EAAO6vD,GACP,MAAZA,IACAA,EAAW,IAEf,IAAIC,EAAWL,EAAYI,GACJ,iBAAZ,GAAyB7vD,EAAMojD,MAAM,iBAC5CrX,EAAOqC,WAAW,wBAAyBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAG/F,IAEI0I,EAAsC,OAFtC1I,EAAQA,EAAMiK,QAAQ,KAAM,KAEVooC,UAAU,EAAG,GAC/B3pC,IACA1I,EAAQA,EAAMqyC,UAAU,IAEd,MAAVryC,GACA+rC,EAAOqC,WAAW,gBAAiBrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAGvF,IAAIwkD,EAAQxkD,EAAMof,MAAM,KACL,EAAfolC,EAAM5kD,QACNmsC,EAAOqC,WAAW,0BAA2BrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,QAASL,MAAOA,IAEjG,IAAIgwD,EAAQxL,EAAM,GAAIuL,EAAWvL,EAAM,GAYvC,IAXKwL,IACDA,EAAQ,KAEPD,IACDA,EAAW,KAGXA,EAASnwD,OAASkwD,EAASH,UAC3B5jB,EAAOqC,WAAW,qBAAsBrC,EAAOsd,cAAe,CAAEtP,UAAW,WAAYuP,MAAO,cAG3FyG,EAASnwD,OAASkwD,EAASH,UAC9BI,GAAY,IAEhBC,EAAQnkB,EAAYmJ,aAAagb,GACjCD,EAAWlkB,EAAYmJ,aAAa+a,GACpC,IAAIG,EAAOF,EAAMxmD,IAAIsmD,EAASF,UAAWpgD,IAAIugD,GAI7C,OAHIrnD,IACAwnD,EAAMA,EAAI1mD,IAAIqiC,EAAYud,sBAEvB8G,EA7CX7xD,EAAQytD,YAAcA,EA+CtBztD,EAAQ0tD,WAAaA,EAIrB1tD,EAAQutD,YAHR,SAAqBsE,EAAKtiC,GACtB,OAAOk+B,EAAYoE,EAAK,GAAItiC,IAMhCvvB,EAAQwtD,WAHR,SAAoBsE,GAChB,OAAOpE,EAAWoE,EAAO,MAI3B,CAAC5I,cAAc,GAAGE,WAAW,KAAK2I,GAAG,CAAC,SAAS9wD,EAAQhB,EAAOD,GAChE,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IACIqwD,EACOA,EAFPxlB,EAAYvrC,EAAQ,cAEb+wD,EAMRA,EAA2BhyD,EAAQgyD,2BAA6BhyD,EAAQgyD,yBAA2B,KALhE,QAAI,GACtCA,EAA8B,IAAI,MAClCA,EAA8B,IAAI,MAClCA,EAA+B,KAAI,OACnCA,EAA+B,KAAI,OAsCvChyD,EAAQm2C,YAlCR,SAAqBvrC,EAAKqnD,QACT,IAATA,IAAmBA,EAAOD,EAAyBnwC,SACnDowC,GAAQD,EAAyBnwC,SAC7BjX,EAAIsnD,YACJtnD,EAAMA,EAAIsnD,UAAUD,IAK5B,IAFA,IAAI1uD,EAAS,GACT+9B,EAAS,EACJpgC,EAAI,EAAGA,EAAI0J,EAAIrJ,OAAQL,IAAK,CACjC,IAAIuC,EAAImH,EAAIlH,WAAWxC,GACnBuC,EAAI,IACJF,EAAO+9B,KAAY79B,GAEdA,EAAI,KACTF,EAAO+9B,KAAa79B,GAAK,EAAK,KAGR,QAAX,MAAJA,IAA2BvC,EAAI,EAAK0J,EAAIrJ,QAA+C,QAAX,MAAxBqJ,EAAIlH,WAAWxC,EAAI,KAE9EuC,EAAI,QAAgB,KAAJA,IAAe,KAA6B,KAAtBmH,EAAIlH,aAAaxC,IACvDqC,EAAO+9B,KAAa79B,GAAK,GAAM,IAC/BF,EAAO+9B,KAAc79B,GAAK,GAAM,GAAM,KAKtCF,EAAO+9B,KAAa79B,GAAK,GAAM,IAJ/BF,EAAO+9B,KAAc79B,GAAK,EAAK,GAAM,KAPrCF,EAAO+9B,KAAiB,GAAJ79B,EAAU,KAgBtC,OAAO+oC,EAAUI,SAASrpC,IA+E9BvD,EAAQ0jD,aA1ER,SAAsB5/C,GAClBA,EAAQ0oC,EAAUI,SAAS9oC,GAI3B,IAHA,IAAIP,EAAS,GACTrC,EAAI,EAEDA,EAAI4C,EAAMvC,QAAQ,CACrB,IAAIkC,EAAIK,EAAM5C,KACd,GAAIuC,GAAK,GAAK,GAMd,GAAIA,GAAK,GAAK,EAAd,CAIA,IAAI0uD,EAAc,KAClB,GAAI1uD,GAAK,GAAK,EACV0uD,EAAc,OAEb,GAAI1uD,GAAK,GAAK,GACf0uD,EAAc,OAEb,GAAI1uD,GAAK,GAAK,GACf0uD,EAAc,OAEb,GAAI1uD,GAAK,GAAK,GACf0uD,EAAc,MAEb,CAAA,GAAI1uD,GAAK,GAAK,IAIf,SAHA0uD,EAAc,EAMlB,GAAIjxD,EAAIixD,EAAcruD,EAAMvC,OAAQ,CAEhC,KAAOL,EAAI4C,EAAMvC,QACTuC,EAAM5C,IAAM,GAAK,EADAA,KAKzB,GAAIA,GAAK4C,EAAMvC,OACX,SAEJ,OAAOgC,EAGX,IACIsxC,EADAlmC,EAAMlL,GAAM,GAAM,EAAI0uD,EAAc,GAAM,EAE9C,IAAKtd,EAAQ,EAAGA,EAAQsd,EAAatd,IAAS,CAC1C,IAAIud,EAAWtuD,EAAM5C,KAErB,GAAIkxD,GAAY,GAAK,EACjB,MAGJzjD,EAAOA,GAAO,EAAiB,GAAXyjD,EAEpBvd,GAASsd,EAITxjD,GAAO,MACPpL,GAAUQ,OAAOC,aAAa2K,IAGlCA,GAAO,MACPpL,GAAUQ,OAAOC,aAAqC,OAAtB2K,GAAO,GAAM,MAAiC,OAAT,KAANA,KAR3DzN,UArDAqC,GAAUQ,OAAOC,aAAaP,GA+DtC,OAAOF,IAIT,CAAC4lD,YAAY,KAAKkJ,GAAG,CAAC,SAASpxD,EAAQhB,EAAOD,GAChD,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI2wD,EAAmBrxD,EAAQ,kBAC3B0yC,EAAS1yC,EAAQ,UACjBsxD,EAAWtxD,EAAQ,YACnBysC,EAASN,EAAansC,EAAQ,aAuFlCjB,EAAQk4C,UAtFR,SAAmBD,EAAKua,EAAMC,GAC1B,IAAIC,EAAU,GACd,GAAqB,iBAAV,GAAiC,MAAXza,EAAIA,IAAa,CAI9C,GAHe,MAAXA,EAAIA,KACJvK,EAAOqC,WAAW,cAAerC,EAAOkH,iBAAkB,CAAE5yC,IAAK,QAErD,MAAZi2C,EAAI0a,MAAgC,MAAhB1a,EAAIlQ,SAAkB,CACV,WAA5BkQ,EAAIA,IAAIjE,UAAU,EAAG,KAAyC,IAAtBiE,EAAI2a,eAC5CllB,EAAOqC,WAAW,mDAAoDrC,EAAOiH,iBAAkB,CAAE3yC,IAAK,MAAOi2C,IAAKA,EAAIA,IAAK0a,KAAM1a,EAAI0a,KAAM5qB,SAAU,eAEzJ,IAAI8qB,EAAgB5a,EAAI0a,KAAO,IAAM1a,EAAIlQ,SACzC2qB,EAAQ/uD,KAAK,CACT8B,IAAK,gBACL9D,MAAO,SAAW4wD,EAAS/rC,OAAOmtB,EAAOwC,YAAY0c,MAG7D5a,EAAMA,EAAIA,IAEd,OAAO,IAAI9I,QAAQ,SAAUI,EAASU,GAClC,IAAI0M,EAAU,IAAI2V,EAAiBtlB,eAC/BwlB,GACA7V,EAAQmW,KAAK,OAAQ7a,GAAK,GAC1Bya,EAAQ/uD,KAAK,CAAE8B,IAAK,eAAgB9D,MAAO,sBAG3Cg7C,EAAQmW,KAAK,MAAO7a,GAAK,GAE7Bya,EAAQ7jB,QAAQ,SAAUkkB,GACtBpW,EAAQqW,iBAAiBD,EAAOttD,IAAKstD,EAAOpxD,SAEhDg7C,EAAQsW,mBAAqB,WACzB,GAA2B,IAAvBtW,EAAQuW,WAAZ,CAGA,IACI,IAAI3vD,EAAS6nB,KAAKC,MAAMsxB,EAAQwW,cAEpC,MAAOlmB,GAEH,IAAImmB,EAAY,IAAIjyD,MAAM,yBAK1B,OAJAiyD,EAAUC,cAAgBpmB,EAC1BmmB,EAAUD,aAAexW,EAAQwW,aACjCC,EAAUnb,IAAMA,OAChBhI,EAAOmjB,GAGX,GAAIX,EACA,IACIlvD,EAASkvD,EAAYlvD,GAEzB,MAAO0pC,GAKH,OAJAA,EAAMgL,IAAMA,EACZhL,EAAMqmB,KAAOd,EACbvlB,EAAMkmB,aAAexW,EAAQwW,kBAC7BljB,EAAOhD,GAIf,GAAsB,KAAlB0P,EAAQpF,OAAe,CAEvB,IAAItK,EAAQ,IAAI9rC,MAAM,sBAAwBw7C,EAAQpF,QAGtD,OAFAtK,EAAMsmB,WAAa5W,EAAQ4W,gBAC3BtjB,EAAOhD,GAGXsC,EAAQhsC,KAEZo5C,EAAQ6W,QAAU,SAAUvmB,GACxBgD,EAAOhD,IAEX,IACQulB,EACA7V,EAAQR,KAAKqW,GAGb7V,EAAQR,OAGhB,MAAOlP,GAEH,IAAIwmB,EAAkB,IAAItyD,MAAM,oBAChCsyD,EAAgBxmB,MAAQA,EACxBgD,EAAOwjB,QAMjB,CAAC1F,WAAW,GAAG3E,WAAW,GAAGC,SAAS,GAAGqK,eAAiB,KAAKC,GAAG,CAAC,SAAS1yD,EAAQhB,EAAOD,GAC7F,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEPinD,EAAmBjqD,MAAQA,KAAKiqD,iBAAoB,SAAUl+C,GAC9D,OAAQA,GAAOA,EAAI+gC,WAAc/gC,EAAM,CAAEm+C,QAAWn+C,IAExD5G,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAGtD,IAAIiyD,EAAYxmB,EAAansC,EAAQ,gBAEjC4yD,EADUrJ,EAAgBvpD,EAAQ,YACfwpD,QAAQ7+C,QAAQ,WAAY,OAAOwgC,cAAc4H,UAAU,GAAGjzB,MAAM,KACvFyrB,EAAYvrC,EAAQ,oBACpBusC,EAAcvsC,EAAQ,sBACtB0yC,EAAS1yC,EAAQ,iBACjB6yD,EAAW7yD,EAAQ,mBACnB8yD,EAAS9yD,EAAQ,iBACjB2vD,EAAS3vD,EAAQ,iBACjBysC,EAASN,EAAansC,EAAQ,oBAE9B+yD,EAAergB,EAAOwC,YAAY,gBAClC8d,EAAc,WAElB,SAASC,EAAap6C,GAClB,OAAS,GAAKA,GAAQ,GAAO,EAAIA,EAMrC,IAAIq6C,EAAwB,WAExB,SAASA,EAAO1jC,EAAS2jC,EAAWpuD,EAAO0iD,EAAO2L,EAAU/P,GACxD5W,EAAOuD,SAAS1wC,KAAM4zD,GACtB5zD,KAAKkwB,QAAUA,EACflwB,KAAK+zD,WAAa9nB,EAAU4K,QAAQ3mB,EAAQE,KAAK5kB,QAAQ,KAAM,KAC/DxL,KAAKg0D,UAAY,KAAO9jC,EAAQ8B,WAAU,EAAM,OAChDhyB,KAAK6zD,UAAY5nB,EAAU4K,QAAQgd,GACnC7zD,KAAKyF,MAAQA,EACbzF,KAAKmoD,MAAQA,EACbnoD,KAAK8zD,SAAWA,EAChB9zD,KAAK+jD,KAAOA,EAsEhB,OApEA6P,EAAO3xD,UAAUgyD,QAAU,SAAUxuD,GAEjC,IAAKzF,KAAK+zD,WAAY,CAClB,GAAaL,GAATjuD,EACA,MAAM,IAAI7E,MAAM,wCAEpB,MAAM,IAAIA,MAAM,mBAEpB,IAAI8H,EAAO,IAAIvG,WAAW,IAEtB2xD,EAAW9zD,KAAK8zD,SAChB/P,EAAO/jD,KAAK+jD,KACZA,IACAA,GAAQ,IAAMt+C,GAEdA,EAAQiuD,GAERhrD,EAAK/F,IAAIspC,EAAUI,SAASrsC,KAAK+zD,YAAa,GAE1ChQ,IACAA,GAAQ,MAKZr7C,EAAK/F,IAAI3C,KAAKkwB,QAAQ8B,YAAY/L,OAAO,MAAM,IAGnD,IAAK,IAAItlB,EAAI,GAAS,GAALA,EAAQA,GAAK,EAC1B+H,EAAK,IAAM/H,GAAK,IAAQ8E,GAAU,GAAK9E,EAAM,IAEjD,IAAI4jB,EAAI0nB,EAAUI,SAASmnB,EAAOrH,iBAAiBnsD,KAAK6zD,WAAW3+B,OAAOxsB,GAAMysB,UAC5E++B,EAAKjnB,EAAYmJ,aAAa7xB,EAAExiB,MAAM,EAAG,KACzCoyD,EAAK5vC,EAAExiB,MAAM,IACbqyD,EAAKF,EAAGtjD,IAAI,KAAO5Q,KAAKkwB,QAAQmB,WAAW,QAAQtlB,IAAI,KAAOsnD,EAAUnxC,MAAM9hB,EAAEgL,SAAS,KAC7F,OAAO,IAAIwoD,EAAOP,EAAUnxC,MAAMiO,eAAe8b,EAAUI,SAAS+nB,IAAMD,EAAI1uD,EAAOzF,KAAKmoD,MAAQ,EAAG2L,EAAU/P,IAEnH6P,EAAO3xD,UAAUoyD,WAAa,SAAUtQ,GACpC,IAAIhV,EAAagV,EAAKvjC,MAAM,KAC5B,GAA0B,IAAtBuuB,EAAW/tC,QAAmC,MAAlB+tC,EAAW,IAA6B,IAAf/uC,KAAKmoD,MAC1D,MAAM,IAAIvnD,MAAM,gBAEE,MAAlBmuC,EAAW,IACXA,EAAWn0B,QAGf,IADA,IAAI5X,EAAShD,KACJW,EAAI,EAAGA,EAAIouC,EAAW/tC,OAAQL,IAAK,CACxC,IAAI4nD,EAAYxZ,EAAWpuC,GAC3B,GAAI4nD,EAAU/D,MAAM,aAAc,CAC9B,IAAI/+C,EAAQpE,SAASknD,EAAU9U,UAAU,EAAG8U,EAAUvnD,OAAS,IAC/D,GAAa0yD,GAATjuD,EACA,MAAM,IAAI7E,MAAM,wBAA0B2nD,GAE9CvlD,EAASA,EAAOixD,QAAQP,EAAcjuD,OAErC,CAAA,IAAI8iD,EAAU/D,MAAM,YAQrB,MAAM,IAAI5jD,MAAM,4BAA8B2nD,GAP1C9iD,EAAQpE,SAASknD,GACrB,GAAamL,GAATjuD,EACA,MAAM,IAAI7E,MAAM,wBAA0B2nD,GAE9CvlD,EAASA,EAAOixD,QAAQxuD,IAMhC,OAAOzC,GAEJ4wD,EAjFgB,GAoF3B,SAASU,EAAUz/B,EAAMi/B,GAErB,IADAj/B,EAAOoX,EAAUI,SAASxX,IACjB7zB,OAAS,IAAoB,GAAd6zB,EAAK7zB,OACzB,MAAM,IAAIJ,MAAM,gBAEpB,IAAI2jB,EAAI0nB,EAAUI,SAASmnB,EAAOrH,iBAAiBsH,GAAcv+B,OAAOL,GAAMM,UAC9E,OAAO,IAAIy+B,EAAOP,EAAUnxC,MAAMiO,eAAe5L,EAAExiB,MAAM,EAAG,KAAMwiB,EAAExiB,MAAM,IAAK,EAAG,EAAG+xD,EAAU,KAYnG,SAASS,EAAeT,EAAUtsB,GAC9B,GAAKA,EAGA,GAAIA,EAASmqB,UACdnqB,EAAWA,EAASmqB,UAAU,aAG9B,IAAK,IAAIhxD,EAAI,EAAGA,EAAI6mC,EAASxmC,OAAQL,IAAK,CACtC,IAAIuC,EAAIskC,EAASrkC,WAAWxC,GAC5B,GAAIuC,EAAI,IAAU,IAAJA,EACV,MAAM,IAAItC,MAAM,8EATxB4mC,EAAW,GAaf,IAAIC,EAAO2L,EAAOwC,YAAY,WAAapO,EAAU4L,EAAOqe,yBAAyB+C,MACrF,OAAOvoB,EAAU4K,QAAQ0c,EAAS5E,OAAOvb,EAAOwC,YAAYke,EAAU1gB,EAAOqe,yBAAyB+C,MAAO/sB,EAAM,KAAM,GAAI+rB,EAAOrH,mBAGxI,SAASsI,EAAkBX,GACvB,IAAI/pD,EAAQ+pD,EAASjoB,cAAcrrB,MAAM,KACzC,GAAKzW,EAAM/I,OAAS,GAAO,EACvB,MAAM,IAAIJ,MAAM,oBAIpB,IAFA,IAAIgwB,EAAUqb,EAAUI,SAAS,IAAIlqC,WAAWsI,KAAKgB,KAAK,GAAK1B,EAAM/I,OAAS,KAC1E+/B,EAAS,EACJpgC,EAAI,EAAGA,EAAIoJ,EAAM/I,OAAQL,IAAK,CACnC,IAAI8E,EAAQ6tD,EAAS1f,QAAQ7pC,EAAMpJ,IACnC,IAAe,IAAX8E,EACA,MAAM,IAAI7E,MAAM,oBAEpB,IAAK,IAAI4P,EAAM,EAAGA,EAAM,GAAIA,IACpB/K,EAAS,GAAM,GAAK+K,IACpBogB,EAAQmQ,GAAU,IAAO,GAAM,EAAKA,EAAS,GAEjDA,IAGR,IAAI2zB,EAAc,GAAK3qD,EAAM/I,OAAS,EAElC2zD,EAAehB,EADA5pD,EAAM/I,OAAS,GAE9B2oD,EAAW1d,EAAUI,SAASgkB,EAAOhhC,OAAOuB,EAAQ7uB,MAAM,EAAG2yD,EAAc,KAAK,GAEpF,IADA/K,GAAYgL,MACM/jC,EAAQA,EAAQ5vB,OAAS,GAAK2zD,GAC5C,MAAM,IAAI/zD,MAAM,oBAEpB,OAAOqrC,EAAU4K,QAAQjmB,EAAQ7uB,MAAM,EAAG2yD,EAAc,IAjE5Dj1D,EAAQm0D,OAASA,EAcjBn0D,EAAQm1D,aALR,SAAsBd,GAGlB,OADAW,EAAkBX,GACXQ,EAAUC,EAAeT,GAAWA,IAM/Cr0D,EAAQo1D,SAHR,SAAkBhgC,GACd,OAAOy/B,EAAUz/B,EAAM,OAqB3Bp1B,EAAQ80D,eAAiBA,EA8BzB90D,EAAQg1D,kBAAoBA,EAsC5Bh1D,EAAQq1D,kBArCR,SAA2BlkC,GAEvB,IADAA,EAAUqb,EAAUI,SAASzb,IAChB5vB,OAAS,GAAO,GAAK4vB,EAAQ5vB,OAAS,IAAuB,GAAjB4vB,EAAQ5vB,OAC7D,MAAM,IAAIJ,MAAM,mBAIpB,IAFA,IAAImJ,EAAQ,CAAC,GACTgrD,EAAgB,GACXp0D,EAAI,EAAGA,EAAIiwB,EAAQ5vB,OAAQL,IAEZ,EAAhBo0D,GACAhrD,EAAMA,EAAM/I,OAAS,KAAO,EAC5B+I,EAAMA,EAAM/I,OAAS,IAAM4vB,EAAQjwB,GACnCo0D,GAAiB,IAIjBhrD,EAAMA,EAAM/I,OAAS,KAAO+zD,EAC5BhrD,EAAMA,EAAM/I,OAAS,IAAM4vB,EAAQjwB,IAAO,EAAIo0D,EAE9ChrD,EAAM3G,KAAKwtB,EAAQjwB,IA5KnB,GA4KqC,EAAIo0D,GA5K5B,GA6KbA,GAAiB,GAIzB,IAAIpL,EAAW1d,EAAUI,SAASgkB,EAAOhhC,OAAOuB,IAAU,GACtDokC,EAAepkC,EAAQ5vB,OAAS,EACpC2oD,GAAYgK,EAAaqB,GAEzBjrD,EAAMA,EAAM/I,OAAS,KAAOg0D,EAC5BjrD,EAAMA,EAAM/I,OAAS,IAAO2oD,GAAa,EAAIqL,EAE7C,IAAIhyD,EAAS,GACb,IAASrC,EAAI,EAAGA,EAAIoJ,EAAM/I,OAAQL,IAC9BqC,EAAOI,KAAKkwD,EAASvpD,EAAMpJ,KAE/B,OAAOqC,EAAOU,KAAK,MAWvBjE,EAAQw1D,gBARR,SAAyBnB,GACrB,IAEI,OADAW,EAAkBX,IACX,EAEX,MAAOpnB,IACP,OAAO,IAIT,CAAC2F,qBAAqB,GAAGiE,mBAAmB,GAAGhE,kBAAkB,GAAG4iB,gBAAgB,GAAGC,kBAAkB,GAAGC,gBAAgB,GAAG5e,gBAAgB,GAAG6e,cAAc,GAAGC,UAAU,KAAKC,GAAG,CAAC,SAAS70D,EAAQhB,EAAOD,GAChN,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAIo0D,EAAW90D,EAAQ,YACvBjB,EAAQg2D,OAASD,EAASC,OAC1B,IAAI7B,EAAS/mB,EAAansC,EAAQ,aAClCjB,EAAQm0D,OAASA,EACjB,IAAI8B,EAAgBh1D,EAAQ,iBAC5BjB,EAAQk2D,WAAaD,EAAcC,YAEjC,CAACC,WAAW,GAAGC,gBAAgB,GAAGC,WAAW,KAAKC,GAAG,CAAC,SAASr1D,EAAQhB,EAAOD,GAChF,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI0gB,EAAW+qB,EAAansC,EAAQ,aACpCjB,EAAQyiB,MAAQ,IAAIJ,EAASM,GAAG,cAE9B,CAACN,SAAW,IAAIk0C,GAAG,CAAC,SAASt1D,EAAQhB,EAAOD,GAC9C,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAI60D,EAAMv1D,EAAQ,UACdmoC,EAASnoC,EAAQ,aACjB0qC,EAAO1qC,EAAQ,QACfssC,EAAYtsC,EAAQ,oBACpBurC,EAAYvrC,EAAQ,oBACpBs0B,EAAO6X,EAAansC,EAAQ,kBAC5B6yD,EAAW7yD,EAAQ,mBACnByyC,EAAczyC,EAAQ,sBACtB0yC,EAAS1yC,EAAQ,iBACjBksD,EAAiBlsD,EAAQ,yBACzBg1D,EAAgBh1D,EAAQ,iBACxBkzD,EAAS/mB,EAAansC,EAAQ,aAE9Bw1D,EAAc,mBAClB,SAASC,EAAcC,GAInB,MAH2B,iBAAhB,GAA0D,OAA9BA,EAAU3iB,UAAU,EAAG,KAC1D2iB,EAAY,KAAOA,GAEhBnqB,EAAUI,SAAS+pB,GAE9B,SAASC,EAAKj1D,EAAOJ,GAEjB,IADAI,EAAQoC,OAAOpC,GACRA,EAAMJ,OAASA,GAClBI,EAAQ,IAAMA,EAElB,OAAOA,EAEX,SAASk1D,EAAY9uB,GACjB,MAA0B,iBAAf,EACA4L,EAAOwC,YAAYpO,EAAU4L,EAAOqe,yBAAyB8E,MAEjEtqB,EAAUI,SAAS7E,GAG9B,SAASgvB,EAAWroB,EAAQ4V,GAGxB,IAFA,IAAI0S,EAAetoB,EACfyX,EAAQ7B,EAAKlY,cAAcrrB,MAAM,KAC5B7f,EAAI,EAAGA,EAAIilD,EAAM5kD,OAAQL,IAAK,CAEnC,IAAI+1D,EAAgB,KACpB,IAAK,IAAIxxD,KAAOuxD,EACZ,GAAIvxD,EAAI2mC,gBAAkB+Z,EAAMjlD,GAAI,CAChC+1D,EAAgBD,EAAavxD,GAC7B,MAIR,GAAsB,OAAlBwxD,EACA,OAAO,KAGXD,EAAeC,EAEnB,OAAOD,EAWXh3D,EAAQk3D,kBATR,SAA2B1E,GACvB,IACI,IAAIvpD,EAAOmiB,KAAKC,MAAMmnC,GAE1B,MAAOvlB,GACH,OAAO,EAEX,OAAQhkC,EAAKkuD,SAAWluD,EAAKmuD,SAgBjCp3D,EAAQq3D,cAbR,SAAuB7E,GACnB,IACI,IAAIvpD,EAAOmiB,KAAKC,MAAMmnC,GAE1B,MAAOvlB,GACH,OAAO,EAEX,SAAKhkC,EAAKqZ,SAAW1gB,SAASqH,EAAKqZ,WAAarZ,EAAKqZ,SAAsC,IAA3B1gB,SAASqH,EAAKqZ,WAsClFtiB,EAAQs3D,iBA7BR,SAA0B9E,EAAMzqB,GAC5B,IAAI9+B,EAAOmiB,KAAKC,MAAMmnC,GACtBzqB,EAAW8uB,EAAY9uB,GAEvB,IAAIqvB,EAAU7pB,EAAUqC,WAAWmnB,EAAW9tD,EAAM,YAEhDkuD,EAAUT,EAAcK,EAAW9tD,EAAM,YAC7C,IAAKkuD,GAAYA,EAAQ51D,OAAS,IAAQ,EACtC,MAAM,IAAIJ,MAAM,mBAEpB,IAAIsE,EAAMquD,EAAS5E,OAAOnnB,EAAUA,EAAU,IAAM,GAAIxS,EAAKk3B,kBAAkBnqD,MAAM,EAAG,IACpFyE,EAAKowD,EAAQ70D,MAAM,EAAG,IACtBi1D,EAAgBJ,EAAQ70D,MAAM,IAE9Bk1D,EAAS,IAAIhB,EAAInuD,gBAAgBE,IAAI9C,EAAKsB,GAC1CquB,EAAOoX,EAAUI,SAAS4qB,EAAOhxD,QAAQ+wD,IAC7CniC,EAAOohC,EAAI1tD,QAAQC,MAAMI,MAAMisB,GAG/B,IADA,IAAIqiC,EAAU,GACLv2D,EAAI,EAAGA,EAAIk0B,EAAK7zB,OAAQL,IAC7Bu2D,GAAW1zD,OAAOC,aAAaoxB,EAAKl0B,IAExC,IAAIw2D,EAAe/jB,EAAOwC,YAAYshB,GAClCE,EAAa,IAAI1B,EAAcC,WAAWxiB,EAAYwC,UAAUwhB,IACpE,GAAIC,EAAWhoB,UAAYynB,EACvB,MAAM,IAAIj2D,MAAM,4BAEpB,OAAOw2D,GAuIX33D,EAAQwG,QAnIR,SAAiBgsD,EAAMzqB,EAAU6vB,GAC7B,IAAI3uD,EAAOmiB,KAAKC,MAAMmnC,GACtBzqB,EAAW8uB,EAAY9uB,GACvB,IAaI8vB,EAAgB,SAAUpyD,EAAKwqC,GAC/B,IAJuB6nB,EAAarxD,EAIhCA,EAAaiwD,EAAcK,EAAW9tD,EAAM,sBAEhD,GADkBujC,EAAU4K,SALL0gB,EAKwBryD,EAAInD,MAAM,GAAI,IALzBmE,EAK8BA,EAJ3DitC,EAAYwC,UAAU1J,EAAU3lB,OAAO,CAACixC,EAAarxD,OAImButC,UAAU,KACrE+iB,EAAW9tD,EAAM,cAAcmjC,cAE/C,OADA6D,EAAO,IAAI9uC,MAAM,qBACV,KAEX,IAAImzD,EApBM,SAAU7uD,EAAKgB,GAEzB,GAAe,gBADFswD,EAAW9tD,EAAM,iBACA,CAC1B,IAAIlC,EAAK2vD,EAAcK,EAAW9tD,EAAM,2BACpChB,EAAU,IAAIuuD,EAAI9uD,QAAQX,GAC1BgxD,EAAS,IAAIvB,EAAInuD,gBAAgBK,IAAIjD,EAAKwC,GAC9C,OAAOukC,EAAUI,SAASmrB,EAAOvxD,QAAQC,IAE7C,OAAO,KAYUD,CAAQf,EAAInD,MAAM,EAAG,IAAKmE,GACvCuxD,EAAcvyD,EAAInD,MAAM,GAAI,IAChC,IAAKgyD,EAED,OADArkB,EAAO,IAAI9uC,MAAM,uBACV,KAEX,IAAIw2D,EAAa,IAAI1B,EAAcC,WAAW5B,GAC9C,GAAIqD,EAAWhoB,UAAYpC,EAAUqC,WAAW3mC,EAAK0mC,SAEjD,OADAM,EAAO,IAAI9uC,MAAM,qBACV,KAGX,GAA6C,QAAzC41D,EAAW9tD,EAAM,oBAA+B,CAChD,IAAIgvD,EAAqBvB,EAAcK,EAAW9tD,EAAM,gCACpDivD,EAAaxB,EAAcK,EAAW9tD,EAAM,6BAC5CkvD,EAAkB,IAAI3B,EAAI9uD,QAAQwwD,GAClCE,EAAiB,IAAI5B,EAAInuD,gBAAgBK,IAAIsvD,EAAaG,GAC1D7T,EAAOyS,EAAW9tD,EAAM,kBAAoBwtD,EAC5CtlC,EAAUqb,EAAUI,SAASwrB,EAAe5xD,QAAQyxD,IACpD5D,EAAWF,EAAOkB,kBAAkBlkC,GACpCkO,EAAO80B,EAAOgB,aAAad,GAAUO,WAAWtQ,GACpD,GAAIjlB,EAAKi1B,YAAc9nB,EAAU4K,QAAQkd,GAErC,OADArkB,EAAO,IAAI9uC,MAAM,sBACV,KAEXw2D,EAAa,IAAI1B,EAAcC,WAAW72B,GAE9C,OAAOs4B,GAEX,OAAO,IAAIxoB,QAAQ,SAAUI,EAASU,GAClC,IAAIooB,EAAMtB,EAAW9tD,EAAM,cAC3B,GAAIovD,GAAwB,iBAAV,EACd,GAA0B,WAAtBA,EAAIjsB,cAA4B,CAChC,IAAIpE,EAAO0uB,EAAcK,EAAW9tD,EAAM,0BACtC+N,EAAIpV,SAASm1D,EAAW9tD,EAAM,uBAC9BrI,EAAIgB,SAASm1D,EAAW9tD,EAAM,uBAC9B8O,EAAInW,SAASm1D,EAAW9tD,EAAM,uBAClC,IAAK+N,IAAMpW,IAAMmX,EAEb,YADAk4B,EAAO,IAAI9uC,MAAM,mDAIrB,GAAsB,IAAjB6V,EAAKA,EAAI,GAEV,YADAi5B,EAAO,IAAI9uC,MAAM,8DAIrB,GAAc,MADV8mC,EAAQrmC,SAASm1D,EAAW9tD,EAAM,4BAGlC,YADAgnC,EAAO,IAAI9uC,MAAM,kDAGrBioC,EAAOrB,EAAUC,EAAMhxB,EAAGpW,EAAGmX,EAAG,GAAI,SAAUk1B,EAAOqrB,EAAU7yD,GAC3D,GAAIwnC,EACAA,EAAMqrB,SAAWA,EACjBroB,EAAOhD,QAEN,GAAIxnC,EAAK,CACVA,EAAM+mC,EAAUI,SAASnnC,GACzB,IAAIkyD,EAAaE,EAAcpyD,EAAKwqC,GACpC,IAAK0nB,EACD,OAEAC,GACAA,EAAiB,GAErBroB,EAAQooB,QAEP,GAAIC,EACL,OAAOA,EAAiBU,UAI/B,GAA0B,WAAtBD,EAAIjsB,cAA4B,CACjCpE,EAAO0uB,EAAcK,EAAW9tD,EAAM,0BAA1C,IACIsvD,EAAU,KACVC,EAAMzB,EAAW9tD,EAAM,wBAC3B,GAAY,gBAARuvD,EACAD,EAAUhjC,EAAKk3B,qBAEd,CAAA,GAAY,gBAAR+L,EAKL,YADAvoB,EAAO,IAAI9uC,MAAM,oBAHjBo3D,EAAUhjC,EAAKm3B,iBAMnB,IACIzkB,EADAxkC,EAAI7B,SAASm1D,EAAW9tD,EAAM,uBAElC,GAAc,MADVg/B,EAAQrmC,SAASm1D,EAAW9tD,EAAM,4BAGlC,YADAgnC,EAAO,IAAI9uC,MAAM,kDAGrB,IAAIsE,EAAMquD,EAAS5E,OAAOnnB,EAAUC,EAAMvkC,EAAGwkC,EAAOswB,GAChDZ,EAAaE,EAAcpyD,EAAKwqC,GACpC,IAAK0nB,EACD,OAEJpoB,EAAQooB,QAGR1nB,EAAO,IAAI9uC,MAAM,6CAIrB8uC,EAAO,IAAI9uC,MAAM,2CAwK7BnB,EAAQsG,QAlKR,SAAiBguD,EAAYvsB,EAAUxY,EAASqoC,GAc5C,GAZyB,mBAAd,GAA6BA,IACpCA,EAAmBroC,EACnBA,EAAU,IAETA,IACDA,EAAU,IAGV+kC,aAAsB2B,EAAcC,aACpC5B,EAAaA,EAAWA,YAGF,MAD1BA,EAAa9nB,EAAUI,SAAS0nB,IACjB/yD,OACX,MAAM,IAAIJ,MAAM,uBAEpB4mC,EAAW8uB,EAAY9uB,GACvB,IAAI5W,EAAU5B,EAAQ4B,QACtB,GAAI5B,EAAQ8kC,SACR,GAAIljC,GACA,GAAIgjC,EAAOkB,kBAAkBlkC,KAAa5B,EAAQ8kC,SAC9C,MAAM,IAAIlzD,MAAM,sCAIpBgwB,EAAUgjC,EAAOa,kBAAkBzlC,EAAQ8kC,UAG/CljC,IACAA,EAAUqb,EAAUI,SAASzb,IAEjC,IAAImzB,EAAO/0B,EAAQ+0B,KACfnzB,IAAYmzB,IACZA,EAAOmS,GAEX,IAAIgC,EAASlpC,EAAQkpC,OAChBA,IACDA,EAAS,aAGb,IAAIzwB,EAAOzY,EAAQyY,KAEfA,EADAA,EACOwE,EAAUI,SAAS5E,GAGnBmlB,EAAelrC,YAAY,IAItC,IAAIlb,EAAK,KACT,GAAIwoB,EAAQxoB,IAER,GAAkB,MADlBA,EAAKylC,EAAUI,SAASrd,EAAQxoB,KACzBxF,OACH,MAAM,IAAIJ,MAAM,mBAIpB4F,EAAKomD,EAAelrC,YAAY,IAGpC,IAAIy2C,EAAanpC,EAAQoc,KACzB,GAAI+sB,GAEA,GAA0B,MAD1BA,EAAalsB,EAAUI,SAAS8rB,IACjBn3D,OACX,MAAM,IAAIJ,MAAM,qBAIpBu3D,EAAavL,EAAelrC,YAAY,IAG5C,IAAIjL,EAAK,GAAK,GAAKpW,EAAI,EAAGmX,EAAI,EAY9B,OAXIwX,EAAQ6Z,SACJ7Z,EAAQ6Z,OAAOpyB,IACfA,EAAIuY,EAAQ6Z,OAAOpyB,GAEnBuY,EAAQ6Z,OAAOxoC,IACfA,EAAI2uB,EAAQ6Z,OAAOxoC,GAEnB2uB,EAAQ6Z,OAAOrxB,IACfA,EAAIwX,EAAQ6Z,OAAOrxB,IAGpB,IAAIo3B,QAAQ,SAAUI,EAASU,GAIlC7G,EAAOrB,EAAUC,EAAMhxB,EAAGpW,EAAGmX,EAAG,GAAI,SAAUk1B,EAAOqrB,EAAU7yD,GAC3D,GAAIwnC,EACAA,EAAMqrB,SAAWA,EACjBroB,EAAOhD,QAEN,GAAIxnC,EAAK,CAGV,IAAI2kC,GAFJ3kC,EAAM+mC,EAAUI,SAASnnC,IAEJnD,MAAM,EAAG,IAC1Bq2D,EAAYlzD,EAAInD,MAAM,GAAI,IAE1B01D,EAAcvyD,EAAInD,MAAM,GAAI,IAE5BqtC,EAAU,IAAKsmB,EAAcC,WAAW5B,GAAa3kB,QAErD1nC,EAAU,IAAIuuD,EAAI9uD,QAAQX,GAC1BgxD,EAAS,IAAIvB,EAAInuD,gBAAgBK,IAAI0hC,EAAYniC,GACjDxB,EAAa+lC,EAAUI,SAASmrB,EAAOzxD,QAAQguD,IAE/CsE,EAAMllB,EAAYwC,UAAU1J,EAAU3lB,OAAO,CAAC8xC,EAAWlyD,KAEzDwC,EAAO,CACP0mC,QAASA,EAAQqE,UAAU,GAAG5H,cAC9BwQ,GAAIjR,EAAKH,GAAG,CAAEZ,OAAQ8tB,IACtBp2C,QAAS,EACTu2C,OAAQ,CACJC,OAAQ,cACRC,aAAc,CACVhyD,GAAIylC,EAAU4K,QAAQrwC,GAAIitC,UAAU,IAExCvtC,WAAY+lC,EAAU4K,QAAQ3wC,GAAYutC,UAAU,GACpDqkB,IAAK,SACLW,UAAW,CACPhxB,KAAMwE,EAAU4K,QAAQpP,GAAMgM,UAAU,GACxCrzC,EAAGqW,EACHiiD,MAAO,GACPlhD,EAAGA,EACHnX,EAAGA,GAEPg4D,IAAKA,EAAI5kB,UAAU,KAI3B,GAAI7iB,EAAS,CACT,IAAI+mC,EAAa/K,EAAelrC,YAAY,IACxCk2C,EAAkB,IAAI3B,EAAI9uD,QAAQwwD,GAClCE,EAAiB,IAAI5B,EAAInuD,gBAAgBK,IAAIsvD,EAAaG,GAC1DF,EAAqBzrB,EAAUI,SAASwrB,EAAe9xD,QAAQ6qB,IAC/D+nC,EAAM,IAAIptB,KACVuN,EAAa6f,EAAIC,iBAAmB,IACpCvC,EAAKsC,EAAIE,cAAgB,EAAG,GAAK,IACjCxC,EAAKsC,EAAIG,aAAc,GAAK,IAC5BzC,EAAKsC,EAAII,cAAe,GAAK,IAC7B1C,EAAKsC,EAAIK,gBAAiB,GAAK,IAC/B3C,EAAKsC,EAAIM,gBAAiB,GAAK,MACnCvwD,EAAK,YAAc,CACfwvD,OAAQA,EACRgB,aAAe,QAAUpgB,EAAY,KAAOpwC,EAAK0mC,QACjDwoB,gBAAiB3rB,EAAU4K,QAAQ8gB,GAAYlkB,UAAU,GACzDikB,mBAAoBzrB,EAAU4K,QAAQ6gB,GAAoBjkB,UAAU,GACpE1xB,QAAS,OAGbs1C,GACAA,EAAiB,GAErBroB,EAAQnkB,KAAKosB,UAAUvuC,SAEtB,GAAI2uD,EACL,OAAOA,EAAiBU,SAOtC,CAAC3lB,mBAAmB,GAAGkE,mBAAmB,GAAG4e,gBAAgB,GAAG3e,qBAAqB,GAAG4e,kBAAkB,GAAGgE,wBAAwB,GAAG3iB,gBAAgB,GAAGof,WAAW,GAAGC,gBAAgB,GAAGuD,SAAS,EAAEC,YAAY,GAAGjuB,KAAO,KAAKkuB,GAAG,CAAC,SAAS54D,EAAQhB,EAAOD,GAChQ,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAMtD,IAAIiyD,EAAYxmB,EAAansC,EAAQ,gBACjCssC,EAAYtsC,EAAQ,oBACpBurC,EAAYvrC,EAAQ,oBACpByyC,EAAczyC,EAAQ,sBACtBysC,EAASzsC,EAAQ,mBACjBi1D,EAA4B,WAC5B,SAASA,EAAW5B,GAChB5mB,EAAOuD,SAAS1wC,KAAM21D,GAClB5B,EAAWA,aACX/zD,KAAK8zD,SAAWC,EAAWD,SAC3B9zD,KAAK+jD,KAAOgQ,EAAWhQ,KACvBgQ,EAAaA,EAAWA,YAE5B,IAE8B,MAD1BA,EAAa9nB,EAAUI,SAAS0nB,IACjB/yD,QACXmsC,EAAOqC,WAAW,4BAA6BrC,EAAOiH,iBAAkB,CAAEhzC,MAAO2yD,IAGzF,MAAOrnB,GACH,IAAIqB,EAAS,CAAEtsC,IAAK,aAAcsxB,OAAQ2Z,EAAM3Z,OAAQ3xB,MAAO,cAC3DsrC,EAAMtrC,QAC8B,iBAAxBsrC,EAAMtrC,MAAY,SAC1B2sC,EAAO/sC,OAAS0rC,EAAMtrC,MAAMJ,QAEhC+sC,EAAO7qB,YAAewpB,EAAW,OAErCS,EAAOqC,WAAW,sBAAuB9C,EAAM7rC,KAAMktC,GAEzD/tC,KAAK+zD,WAAa9nB,EAAU4K,QAAQkd,GACpC/zD,KAAKkwB,QAAUmjC,EAAUnxC,MAAMiO,eAAe4jC,GAE9C/zD,KAAKg0D,UAAY,KAAOh0D,KAAKkwB,QAAQ8B,WAAU,EAAM,OACrDhyB,KAAKovC,QAAUumB,EAAW4D,mBAAmB,KAAOv5D,KAAKkwB,QAAQ8B,WAAU,EAAO,QAuCtF,OArCA2jC,EAAW1zD,UAAUu3D,WAAa,SAAUrkC,GACxC,IAAIrD,EAAY9xB,KAAKkwB,QAAQiB,KAAK8a,EAAUI,SAASlX,GAAS,CAAEvD,WAAW,IAC3E,MAAO,CACHD,cAAeG,EAAUH,cACzBtxB,EAAG,KAAOyxB,EAAUzxB,EAAE+K,SAAS,IAC/B9K,EAAG,KAAOwxB,EAAUxxB,EAAE8K,SAAS,MAGvCuqD,EAAW8D,QAAU,SAAUtkC,EAAQ90B,EAAGC,EAAGqxB,GACzC,IAAIG,EAAY,CACZzxB,EAAG4rC,EAAUI,SAAShsC,GACtBC,EAAG2rC,EAAUI,SAAS/rC,IAEtB0zD,EAAYX,EAAUnxC,MAAM+P,cAAcga,EAAUI,SAASlX,GAASrD,EAAWH,GACrF,OAAOgkC,EAAW4D,mBAAmB,KAAOvF,EAAU/tC,OAAO,OAAO,KAExE0vC,EAAW+D,aAAe,SAAUt4D,EAAOu4D,GAGvC,GADAA,IAAeA,EACM,MAFrBv4D,EAAQ6qC,EAAUI,SAASjrC,IAEjBJ,OAEN,MAAO,KADOqyD,EAAUnxC,MAAMiO,eAAe/uB,GACvB4wB,UAAU2nC,EAAY,OAE3C,GAAqB,KAAjBv4D,EAAMJ,OAEX,MAAO,KADOqyD,EAAUnxC,MAAMoO,cAAclvB,GACtB4wB,UAAU2nC,EAAY,OAE3C,GAAqB,KAAjBv4D,EAAMJ,OAEX,MAAO,KADOqyD,EAAUnxC,MAAMoO,cAAclvB,GACtB4wB,UAAU2nC,EAAY,OAEhD,MAAM,IAAI/4D,MAAM,kBAEpB+0D,EAAW4D,mBAAqB,SAAUvF,GAEtC,OADAA,EAAY,KAAO2B,EAAW+D,aAAa1F,GAAW,GAAOjyD,MAAM,GAC5DirC,EAAUqC,WAAW,KAAO8D,EAAYwC,UAAUqe,GAAWvgB,UAAU,MAE3EkiB,EAnEoB,GAqE/Bl2D,EAAQk2D,WAAaA,GAEnB,CAACvjB,mBAAmB,GAAGkE,mBAAmB,GAAGhE,kBAAkB,GAAGiE,qBAAqB,GAAG8e,cAAc,KAAKuE,GAAG,CAAC,SAASl5D,EAAQhB,EAAOD,GAC3I,aACA,IAAIwqD,EAAmBjqD,MAAQA,KAAKiqD,iBAAoB,SAAUl+C,GAC9D,OAAQA,GAAOA,EAAI+gC,WAAc/gC,EAAM,CAAEm+C,QAAWn+C,IAEpD8gC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEXmC,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAIy4D,EAAc5P,EAAgBvpD,EAAQ,cACtCssC,EAAYtsC,EAAQ,oBACpBusC,EAAcvsC,EAAQ,sBACtBurC,EAAYvrC,EAAQ,oBACpByyC,EAAczyC,EAAQ,sBACtBksD,EAAiBlsD,EAAQ,yBACzBmsD,EAAMhgB,EAAansC,EAAQ,iBAC3B0yC,EAAS1yC,EAAQ,iBACjBysC,EAASN,EAAansC,EAAQ,oBAC9Bo5D,EAAWp5D,EAAQ,YACnBq5D,EAAgBltB,EAAansC,EAAQ,qBACrCg1D,EAAgBh1D,EAAQ,iBAG5BisC,QAAQ9Y,IAAI,0BACZ,IACImmC,EAAoB,CACpB,CAAEl4D,KAAM,QAASm4D,UAAW,IAC5B,CAAEn4D,KAAM,WAAYm4D,UAAW,IAC/B,CAAEn4D,KAAM,WAAYm4D,UAAW,IAC/B,CAAEn4D,KAAM,KAAMd,OAAQ,IACtB,CAAEc,KAAM,QAASm4D,UAAW,IAC5B,CAAEn4D,KAAM,SAGR2zD,EAAwB,WACxB,SAASA,EAAO1B,EAAYtlB,GAExBzuC,KAAKgwC,gBAAkB,KACvB7C,EAAOuD,SAAS1wC,KAAMy1D,GAElB1B,aAAsB2B,EAAcC,YACpC31D,KAAKo3D,WAAarD,EACd/zD,KAAKo3D,WAAWtD,WAChB3uD,OAAOC,eAAepF,KAAM,WAAY,CACpCmvB,YAAY,EACZ/tB,MAAOpB,KAAKo3D,WAAWtD,SACvBt1B,UAAU,IAGdx+B,KAAK+jD,KAAO/jD,KAAKo3D,WAAWrT,OAIhC/jD,KAAKo3D,WAAa,IAAI1B,EAAcC,WAAW5B,GAEnD/zD,KAAK+zD,WAAa/zD,KAAKo3D,WAAWrD,WAClC/zD,KAAKyuC,SAAWA,EAEhBtpC,OAAOC,eAAepF,KAAM,UAAW,CACnCmvB,YAAY,EACZ/tB,MAAOpB,KAAKo3D,WAAWhoB,QACvB5Q,UAAU,IAqWlB,OAlWAi3B,EAAOxzD,UAAUkvB,KAAO,SAAU8c,GAC9B,IAAI4B,EAAU5B,EAAY4B,QACX,MAAXA,GAAmB7vC,KAAKyuC,WACxBoB,EAAU7vC,KAAKyuC,SAASoB,SAEvBA,IACDA,EAAU,GAEd,IAAIsP,EAAM,GACV6a,EAAkB1rB,QAAQ,SAAU4rB,GAChC,IAaYxtB,EAbRtrC,EAAQ6sC,EAAYisB,EAAUp4D,OAAS,GAG3C,GAFAV,EAAQ6qC,EAAUI,SAASJ,EAAU4K,QAAQz1C,IAEzC84D,EAAUl5D,QAAUI,EAAMJ,SAAWk5D,EAAUl5D,QAAyB,EAAfI,EAAMJ,OAI/D,MAHI0rC,EAAQ,IAAI9rC,MAAM,WAAas5D,EAAUp4D,OACvCixB,OAAS,eACf2Z,EAAMtrC,MAAQA,EACRsrC,EAGV,GAAIwtB,EAAUD,YACV74D,EAAQ6qC,EAAUoT,WAAWj+C,IACnBJ,OAASk5D,EAAUD,UAIzB,MAHIvtB,EAAQ,IAAI9rC,MAAM,WAAas5D,EAAUp4D,OACvCixB,OAAS,WACf2Z,EAAMtrC,MAAQA,EACRsrC,EAGdyS,EAAI/7C,KAAK6oC,EAAU4K,QAAQz1C,MAE3ByuC,IACAsP,EAAI/7C,KAAK6oC,EAAU4K,QAAQhH,IAC3BsP,EAAI/7C,KAAK,MACT+7C,EAAI/7C,KAAK,OAEb,IAAI+xB,EAASge,EAAYwC,UAAUkX,EAAI5mC,OAAOk5B,IAC1CrtB,EAAY9xB,KAAKo3D,WAAWoC,WAAWrkC,GACvCvxB,EAAI,GAAKkuB,EAAUH,cAUvB,OATIke,IACAsP,EAAI9Q,MACJ8Q,EAAI9Q,MACJ8Q,EAAI9Q,MACJzqC,GAAe,EAAVisC,EAAc,GAEvBsP,EAAI/7C,KAAK6oC,EAAU4K,QAAQjzC,IAC3Bu7C,EAAI/7C,KAAK0uB,EAAUzxB,GACnB8+C,EAAI/7C,KAAK0uB,EAAUxxB,GACZusD,EAAI5mC,OAAOk5B,IAWtBsW,EAAOvf,iBAAmB,SAAUikB,GAChCA,EAAiBluB,EAAU4K,QAAQsjB,GACnC,IAAI/pB,EAAoByc,EAAI3gB,OAAOiuB,GACnC,GAAiC,IAA7B/pB,EAAkBpvC,OAClB,MAAM,IAAIJ,MAAM,uBAEpB,IAAIu+C,EAAM,GACNlR,EAAc,GAClB+rB,EAAkB1rB,QAAQ,SAAU4rB,EAAWz0D,GAC3CwoC,EAAYisB,EAAUp4D,MAAQsuC,EAAkB3qC,GAChD05C,EAAI/7C,KAAKgtC,EAAkB3qC,MAE3BwoC,EAAYT,KACU,MAAlBS,EAAYT,UACLS,EAAYT,GAGnBS,EAAYT,GAAKR,EAAUqC,WAAWpB,EAAYT,KAG1D,CAAC,WAAY,WAAY,QAAS,SAASc,QAAQ,SAAUxsC,GACzD,GAAKmsC,EAAYnsC,GAAjB,CAGA,IAAIV,EAAQ6rC,EAAYiC,aACO,EAA3BjB,EAAYnsC,GAAMd,SAClBI,EAAQ6rC,EAAYmJ,aAAanI,EAAYnsC,KAEjDmsC,EAAYnsC,GAAQV,KAExB6sC,EAAYnd,MAAQmd,EAAYnd,MAAMnjB,WACtC,IAAI/J,EAAIqoC,EAAUI,SAAS+D,EAAkB,IACzC/vC,EAAI4rC,EAAUI,SAAS+D,EAAkB,IACzC9vC,EAAI2rC,EAAUI,SAAS+D,EAAkB,IAC7C,GAAgB,GAAZxsC,EAAE5C,QAA2B,GAAZX,EAAEW,QAAeX,EAAEW,QAAU,IAAkB,GAAZV,EAAEU,QAAeV,EAAEU,QAAU,GAAI,CACrFitC,EAAYrqC,EAAIqpC,EAAYmJ,aAAaxyC,GAAG+J,WAC5CsgC,EAAY5tC,EAAI+vC,EAAkB,GAClCnC,EAAY3tC,EAAI8vC,EAAkB,GAClC,IAAIP,GAAW5B,EAAYrqC,EAAI,IAAM,EACjCisC,EAAU,IACVA,EAAU,GAEdA,EAAUplC,KAAKi2C,MAAM7Q,GACrB5B,EAAY4B,QAAUA,EACtB,IAAIle,EAAgBsc,EAAYrqC,EAAI,GAChCisC,IACAsP,EAAI/7C,KAAK6oC,EAAU4K,QAAQhH,IAC3BsP,EAAI/7C,KAAK,MACT+7C,EAAI/7C,KAAK,MACTuuB,GAA2B,EAAVke,EAAc,GAEnC,IAAI1a,EAASge,EAAYwC,UAAUkX,EAAI5mC,OAAOk5B,IAC9C,IACIlR,EAAYZ,KAAOqoB,EAAcC,WAAW8D,QAAQtkC,EAAQ90B,EAAGC,EAAGqxB,GAEtE,MAAO+a,GACHC,QAAQ9Y,IAAI6Y,IAGpB,OAAOuB,GAEXwnB,EAAOxzD,UAAUotC,WAAa,WAC1B,OAAOT,QAAQI,QAAQhvC,KAAKovC,UAEhCqmB,EAAOxzD,UAAU65C,WAAa,SAAUzE,GACpC,IAAKr3C,KAAKyuC,SACN,MAAM,IAAI7tC,MAAM,oBAEpB,OAAOZ,KAAKyuC,SAASqN,WAAW97C,KAAKovC,QAASiI,IAElDoe,EAAOxzD,UAAUguC,oBAAsB,SAAUoH,GAC7C,IAAKr3C,KAAKyuC,SACN,MAAM,IAAI7tC,MAAM,oBAEpB,OAAOZ,KAAKyuC,SAASwB,oBAAoBjwC,KAAKovC,QAASiI,IAE3Doe,EAAOxzD,UAAU0tC,YAAc,SAAU1B,GACrC,IAAKjuC,KAAKyuC,SACN,MAAM,IAAI7tC,MAAM,oBAEpB,IAAIw5D,EAAY,GAUhB,MATA,CAAC,OAAQ,KAAM,OAAQ,SAAS9rB,QAAQ,SAAUppC,GACtB,MAApB+oC,EAAY/oC,KAGhBk1D,EAAUl1D,GAAO+oC,EAAY/oC,MAET,MAApB+oC,EAAYZ,OACZ+sB,EAAU/sB,KAAOrtC,KAAKovC,SAEnBpvC,KAAKyuC,SAASkB,YAAYyqB,IAErC3E,EAAOxzD,UAAU2tC,gBAAkB,SAAU3B,GACzC,IAAKjuC,KAAKyuC,SACN,MAAM,IAAI7tC,MAAM,oBAEpB,IAAKqtC,GAAwC,iBAAlB,EACvB,MAAM,IAAIrtC,MAAM,8BAEpB,IAAI0sC,EAAWW,EAAYX,SACX,MAAZA,IACAA,EAAWttC,KAAKgwC,iBAEpB,IAAIjwC,EAAOC,KACPq6D,EAAkB,KAElBA,EADApsB,EAAYV,SACMqB,QAAQI,QAAQf,EAAYV,UAG5BvtC,KAAKyuC,SAAS0B,cAEpC,IAAImqB,EAAe,KAEfA,EADArsB,EAAYnd,MACG8d,QAAQI,QAAQf,EAAYnd,OAG5B9wB,KAAKyuC,SAASwB,oBAAoBlwC,EAAKqvC,QAAS,WAEnE,IAAIS,EAAU7vC,KAAKyuC,SAASoB,QACxB0qB,EAAY,KAEZA,EADAtsB,EAAYT,GACAxtC,KAAKyuC,SAASK,YAAYb,EAAYT,IAGtCoB,QAAQI,aAAQxf,GAEhC,IAAI9mB,EAAOujC,EAAU4K,QAAQ5I,EAAYvlC,MAAQ,MAC7CtH,EAAQ6rC,EAAYiC,aACxB,OAAON,QAAQC,IAAI,CAACwrB,EAAiBC,EAAcC,IAAYtrB,KAAK,SAAUurB,GAC1E,IAAIpqB,EAAoBrwC,EAAKoxB,KAAK,CAC9Bqc,GAAIgtB,EAAQ,GACZ9xD,KAAMA,EACN4kC,SAAUA,EACVC,SAAUitB,EAAQ,GAClB1pC,MAAO0pC,EAAQ,GACfp5D,MAAOA,EACPyuC,QAASA,IAEb,OAAO9vC,EAAK0uC,SAASmB,gBAAgBQ,GAAmBnB,KAAK,SAAUngB,GACnE,IAAImf,EAAcwnB,EAAOvf,iBAAiB9F,GAK1C,OAJAnC,EAAYnf,KAAOA,EACnBmf,EAAY8N,KAAO,WACf,OAAOh8C,EAAK0uC,SAASuN,mBAAmBltB,IAErCmf,OAInBwnB,EAAOxzD,UAAU25C,KAAO,SAAUtL,EAAemqB,EAAWzrC,GAIxD,OAHKA,IACDA,EAAU,IAEPhvB,KAAK4vC,gBAAgB,CACxBpC,GAAI8C,EACJhD,SAAUte,EAAQse,SAClBC,SAAUve,EAAQue,SAClBzc,MAAO9B,EAAQ8B,MACf1vB,MAAOq5D,KAGfhF,EAAOiF,YAAc,SAAUl7B,GAC3B,IAAI+b,EAAUtP,EAAU3lB,OAAO,CAC3B8sB,EAAOwC,YAAY,+BACnBxC,EAAOwC,YAAYpyC,OAAOg8B,EAAQx+B,SACX,iBAAd,EAA0BoyC,EAAOwC,YAAYpW,GAAWA,IAErE,OAAO2T,EAAYwC,UAAU4F,IAEjCka,EAAOxzD,UAAUg6C,YAAc,SAAUzc,GACrC,IACIm7B,EADa,IAAIjF,EAAcC,WAAW31D,KAAK+zD,YAC9ByF,WAAW/D,EAAOiF,YAAYl7B,IACnD,OAAQyM,EAAUuf,WAAWmP,EAAIt6D,EAAG,IAAM4rC,EAAUuf,WAAWmP,EAAIr6D,EAAG,IAAImzC,UAAU,IAAMknB,EAAIhpC,cAAgB,KAAO,OAEzH8jC,EAAOmF,cAAgB,SAAUp7B,EAAS1N,GAEtC,GAAwB,MADxBA,EAAYma,EAAU4K,QAAQ/kB,IAChB9wB,OACV,MAAM,IAAIJ,MAAM,qBAEpB,IAAIu0B,EAASsgC,EAAOiF,YAAYl7B,GAC5B7N,EAAgBtwB,SAASywB,EAAU2hB,UAAU,KAAM,IAIvD,GAHqB,IAAjB9hB,IACAA,GAAiB,IAEjBA,EAAgB,EAChB,MAAM,IAAI/wB,MAAM,qBAEpB,OAAO80D,EAAcC,WAAW8D,QAAQtkC,EAAQrD,EAAU2hB,UAAU,EAAG,IAAK,KAAO3hB,EAAU2hB,UAAU,GAAI,KAAM9hB,IAErH8jC,EAAOxzD,UAAU8D,QAAU,SAAUyhC,EAAUxY,EAASqoC,GAKpD,GAJyB,mBAAd,GAA6BA,IACpCA,EAAmBroC,EACnBA,EAAU,IAEVqoC,GAAkD,mBAAvB,EAC3B,MAAM,IAAIz2D,MAAM,oBAKpB,GAHKouB,IACDA,EAAU,IAEVhvB,KAAK8zD,SAAU,CAEf,IAAI+G,EAAc,GAClB,IAAK,IAAI31D,KAAO8pB,EACZ6rC,EAAY31D,GAAO8pB,EAAQ9pB,IAE/B8pB,EAAU6rC,GAEF/G,SAAW9zD,KAAK8zD,SACxB9kC,EAAQ+0B,KAAO/jD,KAAK+jD,KAExB,OAAOgW,EAAch0D,QAAQ/F,KAAK+zD,WAAYvsB,EAAUxY,EAASqoC,IAErE5B,EAAOqF,aAAe,SAAU9rC,GAC5B,IAAI4B,EAAUg8B,EAAelrC,YAAY,IACpCsN,IACDA,EAAU,IAEVA,EAAQ+rC,eACRnqC,EAAUqb,EAAUI,SAAS8G,EAAYwC,UAAU1J,EAAU3lB,OAAO,CAACsK,EAAS5B,EAAQ+rC,gBAAgBtnB,UAAU,EAAG,MAEvH,IAAIqgB,EAAWgG,EAAShF,kBAAkBlkC,GAC1C,OAAO6kC,EAAOb,aAAad,EAAU9kC,EAAQ+0B,OAEjD0R,EAAOuF,kBAAoB,SAAU/I,GACjC,OAAQ8H,EAAcjD,cAAc7E,IAAS8H,EAAcpD,kBAAkB1E,IAEjFwD,EAAOwF,oBAAsB,SAAUhJ,EAAMzqB,EAAU6vB,GACnD,GAAIA,GAAkD,mBAAvB,EAC3B,MAAM,IAAIz2D,MAAM,oBAEpB,OAAO,IAAIguC,QAAQ,SAAUI,EAASU,GAClC,GAAIqqB,EAAcpD,kBAAkB1E,GAChC,IACI,IAAI8B,EAAagG,EAAchD,iBAAiB9E,EAAMzqB,GACtDwH,EAAQ,IAAIymB,EAAO1B,IAEvB,MAAOrnB,GACHgD,EAAOhD,QAGNqtB,EAAcjD,cAAc7E,GACjC8H,EAAc9zD,QAAQgsD,EAAMzqB,EAAU6vB,GAAkBpoB,KAAK,SAAUmoB,GACnE,IAAI8D,EAAS,IAAIzF,EAAO2B,GAOxBpoB,EAAQksB,IACT,SAAUxuB,GACTgD,EAAOhD,KAIXgD,EAAO,0BAInB+lB,EAAOb,aAAe,SAAUd,EAAU/P,GAItC,OAHKA,IACDA,EAxWM,oBA0WH,IAAI0R,EAAOqE,EAASlF,aAAad,GAAUO,WAAWtQ,KAEjE0R,EAAO0F,gBAAkB,SAAUC,EAAU5zB,EAAU6vB,GACnD,GAAIA,GAAkD,mBAAvB,EAC3B,MAAM,IAAIz2D,MAAM,oBAcpB,OAXIw6D,EADsB,iBAAf,EACIhoB,EAAOwC,YAAYwlB,EAAUhoB,EAAOqe,yBAAyB8E,MAG7DtqB,EAAUI,SAAS+uB,GAG9B5zB,EADsB,iBAAf,EACI4L,EAAOwC,YAAYpO,EAAU4L,EAAOqe,yBAAyB8E,MAG7DtqB,EAAUI,SAAS7E,GAE3B,IAAIoH,QAAQ,SAAUI,EAASU,GAClCmqB,EAAY3P,QAAQ1iB,EAAU4zB,EAAW,GAAK,GAAK,EAAG,EAAG,GAAI,SAAU1uB,EAAOqrB,EAAU7yD,GACpF,GAAIwnC,EACAgD,EAAOhD,QAEN,GAAIxnC,EACL8pC,EAAQ,IAAIymB,EAAOxpB,EAAU4K,QAAQ3xC,UAEpC,GAAImyD,EACL,OAAOA,EAAiBU,QAKjCtC,EAhYgB,GAkY3Bh2D,EAAQg2D,OAASA,GAEf,CAACrjB,mBAAmB,GAAGC,qBAAqB,GAAGiE,mBAAmB,GAAGhE,kBAAkB,GAAGiE,qBAAqB,GAAG4iB,wBAAwB,GAAGxV,eAAe,GAAGnN,gBAAgB,GAAGof,WAAW,GAAGyF,mBAAmB,GAAGxF,gBAAgB,GAAGwD,YAAY,KAAKiC,GAAG,CAAC,SAAS56D,EAAQhB,EAAOD,GACxR,aACA0F,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IAEtD3B,EAAQyqD,QADI,g0VAGV,IAAIqR,GAAG,CAAC,SAAS76D,EAAQhB,EAAOD,GAClC,aACA,IAAIotC,EAAgB7sC,MAAQA,KAAK6sC,cAAiB,SAAU9gC,GACxD,GAAIA,GAAOA,EAAI+gC,WAAY,OAAO/gC,EAClC,IAAI/I,EAAS,GACb,GAAW,MAAP+I,EAAa,IAAK,IAAImB,KAAKnB,EAAS5G,OAAO6qB,eAAejvB,KAAKgL,EAAKmB,KAAIlK,EAAOkK,GAAKnB,EAAImB,IAE5F,OADAlK,EAAgB,QAAI+I,EACb/I,GAEPinD,EAAmBjqD,MAAQA,KAAKiqD,iBAAoB,SAAUl+C,GAC9D,OAAQA,GAAOA,EAAI+gC,WAAc/gC,EAAM,CAAEm+C,QAAWn+C,IAExD5G,OAAOC,eAAe3F,EAAS,aAAc,CAAE2B,OAAO,IACtD,IAAIo6D,EAAc96D,EAAQ,eAC1BjB,EAAQ4wC,SAAWmrB,EAAYnrB,SAC/B5wC,EAAQkxC,UAAY6qB,EAAY7qB,UAChC,IAAI6I,EAAY3M,EAAansC,EAAQ,gBACrCjB,EAAQ+5C,UAAYA,EACpB,IAAIrM,EAASN,EAAansC,EAAQ,mBAClCjB,EAAQ0tC,OAASA,EACjB,IAAIsuB,EAAUxR,EAAgBvpD,EAAQ,YACtCjB,EAAQ2I,MAAQqzD,EAAQvR,QACxB,IAAIsL,EAAW90D,EAAQ,YACvBjB,EAAQm0D,OAAS4B,EAAS5B,OAC1Bn0D,EAAQk2D,WAAaH,EAASG,WAC9Bl2D,EAAQg2D,OAASD,EAASC,QAExB,CAACiG,cAAc,GAAGC,cAAc,GAAGhkC,UAAU,GAAGikC,iBAAiB,GAAG9F,WAAW,MAAM,GAAG,CAAC,IAz6dmR,CAy6d9Q","file":"ethers.min.js","sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.ethers = f()}})(function(){var define,module,exports;return (function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){\n\"use strict\";\n\n(function(root) {\n\n function checkInt(value) {\n return (parseInt(value) === value);\n }\n\n function checkInts(arrayish) {\n if (!checkInt(arrayish.length)) { return false; }\n\n for (var i = 0; i < arrayish.length; i++) {\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\n return false;\n }\n }\n\n return true;\n }\n\n function coerceArray(arg, copy) {\n\n // ArrayBuffer view\n if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {\n\n if (copy) {\n if (arg.slice) {\n arg = arg.slice();\n } else {\n arg = Array.prototype.slice.call(arg);\n }\n }\n\n return arg;\n }\n\n // It's an array; check it is a valid representation of a byte\n if (Array.isArray(arg)) {\n if (!checkInts(arg)) {\n throw new Error('Array contains invalid value: ' + arg);\n }\n\n return new Uint8Array(arg);\n }\n\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\n if (checkInt(arg.length) && checkInts(arg)) {\n return new Uint8Array(arg);\n }\n\n throw new Error('unsupported array-like object');\n }\n\n function createArray(length) {\n return new Uint8Array(length);\n }\n\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\n if (sourceStart != null || sourceEnd != null) {\n if (sourceArray.slice) {\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\n } else {\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\n }\n }\n targetArray.set(sourceArray, targetStart);\n }\n\n\n\n var convertUtf8 = (function() {\n function toBytes(text) {\n var result = [], i = 0;\n text = encodeURI(text);\n while (i < text.length) {\n var c = text.charCodeAt(i++);\n\n // if it is a % sign, encode the following 2 bytes as a hex value\n if (c === 37) {\n result.push(parseInt(text.substr(i, 2), 16))\n i += 2;\n\n // otherwise, just the actual byte\n } else {\n result.push(c)\n }\n }\n\n return coerceArray(result);\n }\n\n function fromBytes(bytes) {\n var result = [], i = 0;\n\n while (i < bytes.length) {\n var c = bytes[i];\n\n if (c < 128) {\n result.push(String.fromCharCode(c));\n i++;\n } else if (c > 191 && c < 224) {\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\n i += 2;\n } else {\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\n i += 3;\n }\n }\n\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n var convertHex = (function() {\n function toBytes(text) {\n var result = [];\n for (var i = 0; i < text.length; i += 2) {\n result.push(parseInt(text.substr(i, 2), 16));\n }\n\n return result;\n }\n\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\n var Hex = '0123456789abcdef';\n\n function fromBytes(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i++) {\n var v = bytes[i];\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\n }\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n\n // Number of rounds by keysize\n var numberOfRounds = {16: 10, 24: 12, 32: 14}\n\n // Round constant words\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n\n // S-box and Inverse S-box (S is for Substitution)\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\n var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n\n // Transformations for encryption\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n\n // Transformations for decryption\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n\n // Transformations for decryption key expansion\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\n\n function convertToInt32(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i += 4) {\n result.push(\n (bytes[i ] << 24) |\n (bytes[i + 1] << 16) |\n (bytes[i + 2] << 8) |\n bytes[i + 3]\n );\n }\n return result;\n }\n\n var AES = function(key) {\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n Object.defineProperty(this, 'key', {\n value: coerceArray(key, true)\n });\n\n this._prepare();\n }\n\n\n AES.prototype._prepare = function() {\n\n var rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\n }\n\n // encryption round keys\n this._Ke = [];\n\n // decryption round keys\n this._Kd = [];\n\n for (var i = 0; i <= rounds; i++) {\n this._Ke.push([0, 0, 0, 0]);\n this._Kd.push([0, 0, 0, 0]);\n }\n\n var roundKeyCount = (rounds + 1) * 4;\n var KC = this.key.length / 4;\n\n // convert the key into ints\n var tk = convertToInt32(this.key);\n\n // copy values into round key arrays\n var index;\n for (var i = 0; i < KC; i++) {\n index = i >> 2;\n this._Ke[index][i % 4] = tk[i];\n this._Kd[rounds - index][i % 4] = tk[i];\n }\n\n // key expansion (fips-197 section 5.2)\n var rconpointer = 0;\n var t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[ tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (var i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n } else {\n for (var i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n\n tk[KC / 2] ^= (S[ tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n\n for (var i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n\n // copy values into round key arrays\n var i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n this._Ke[r][c] = tk[i];\n this._Kd[rounds - r][c] = tk[i++];\n t++;\n }\n }\n\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (var r = 1; r < rounds; r++) {\n for (var c = 0; c < 4; c++) {\n tt = this._Kd[r][c];\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[ tt & 0xFF]);\n }\n }\n }\n\n AES.prototype.encrypt = function(plaintext) {\n if (plaintext.length != 16) {\n throw new Error('invalid plaintext size (must be 16 bytes)');\n }\n\n var rounds = this._Ke.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(plaintext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Ke[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T1[(t[ i ] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[ t[(i + 3) % 4] & 0xff] ^\n this._Ke[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Ke[rounds][i];\n result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n AES.prototype.decrypt = function(ciphertext) {\n if (ciphertext.length != 16) {\n throw new Error('invalid ciphertext size (must be 16 bytes)');\n }\n\n var rounds = this._Kd.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(ciphertext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Kd[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T5[(t[ i ] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[ t[(i + 1) % 4] & 0xff] ^\n this._Kd[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Kd[rounds][i];\n result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n\n /**\n * Mode Of Operation - Electonic Codebook (ECB)\n */\n var ModeOfOperationECB = function(key) {\n if (!(this instanceof ModeOfOperationECB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Electronic Code Block\";\n this.name = \"ecb\";\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationECB.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n block = this._aes.encrypt(block);\n copyArray(block, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationECB.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n copyArray(block, plaintext, i);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Block Chaining (CBC)\n */\n var ModeOfOperationCBC = function(key, iv) {\n if (!(this instanceof ModeOfOperationCBC)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Block Chaining\";\n this.name = \"cbc\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastCipherblock = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCBC.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n\n for (var j = 0; j < 16; j++) {\n block[j] ^= this._lastCipherblock[j];\n }\n\n this._lastCipherblock = this._aes.encrypt(block);\n copyArray(this._lastCipherblock, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n\n for (var j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\n }\n\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Feedback (CFB)\n */\n var ModeOfOperationCFB = function(key, iv, segmentSize) {\n if (!(this instanceof ModeOfOperationCFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Feedback\";\n this.name = \"cfb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 size)');\n }\n\n if (!segmentSize) { segmentSize = 1; }\n\n this.segmentSize = segmentSize;\n\n this._shiftRegister = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCFB.prototype.encrypt = function(plaintext) {\n if ((plaintext.length % this.segmentSize) != 0) {\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\n }\n\n var encrypted = coerceArray(plaintext, true);\n\n var xorSegment;\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n for (var j = 0; j < this.segmentSize; j++) {\n encrypted[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return encrypted;\n }\n\n ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {\n if ((ciphertext.length % this.segmentSize) != 0) {\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\n }\n\n var plaintext = coerceArray(ciphertext, true);\n\n var xorSegment;\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n\n for (var j = 0; j < this.segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return plaintext;\n }\n\n /**\n * Mode Of Operation - Output Feedback (OFB)\n */\n var ModeOfOperationOFB = function(key, iv) {\n if (!(this instanceof ModeOfOperationOFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Output Feedback\";\n this.name = \"ofb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastPrecipher = coerceArray(iv, true);\n this._lastPrecipherIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationOFB.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._lastPrecipherIndex === 16) {\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\n this._lastPrecipherIndex = 0;\n }\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\n\n\n /**\n * Counter object for CTR common mode of operation\n */\n var Counter = function(initialValue) {\n if (!(this instanceof Counter)) {\n throw Error('Counter must be instanitated with `new`');\n }\n\n // We allow 0, but anything false-ish uses the default 1\n if (initialValue !== 0 && !initialValue) { initialValue = 1; }\n\n if (typeof(initialValue) === 'number') {\n this._counter = createArray(16);\n this.setValue(initialValue);\n\n } else {\n this.setBytes(initialValue);\n }\n }\n\n Counter.prototype.setValue = function(value) {\n if (typeof(value) !== 'number' || parseInt(value) != value) {\n throw new Error('invalid counter value (must be an integer)');\n }\n\n for (var index = 15; index >= 0; --index) {\n this._counter[index] = value % 256;\n value = value >> 8;\n }\n }\n\n Counter.prototype.setBytes = function(bytes) {\n bytes = coerceArray(bytes, true);\n\n if (bytes.length != 16) {\n throw new Error('invalid counter bytes size (must be 16 bytes)');\n }\n\n this._counter = bytes;\n };\n\n Counter.prototype.increment = function() {\n for (var i = 15; i >= 0; i--) {\n if (this._counter[i] === 255) {\n this._counter[i] = 0;\n } else {\n this._counter[i]++;\n break;\n }\n }\n }\n\n\n /**\n * Mode Of Operation - Counter (CTR)\n */\n var ModeOfOperationCTR = function(key, counter) {\n if (!(this instanceof ModeOfOperationCTR)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Counter\";\n this.name = \"ctr\";\n\n if (!(counter instanceof Counter)) {\n counter = new Counter(counter)\n }\n\n this._counter = counter;\n\n this._remainingCounter = null;\n this._remainingCounterIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCTR.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._remainingCounterIndex === 16) {\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\n this._remainingCounterIndex = 0;\n this._counter.increment();\n }\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\n\n\n ///////////////////////\n // Padding\n\n // See:https://tools.ietf.org/html/rfc2315\n function pkcs7pad(data) {\n data = coerceArray(data, true);\n var padder = 16 - (data.length % 16);\n var result = createArray(data.length + padder);\n copyArray(data, result);\n for (var i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n }\n\n function pkcs7strip(data) {\n data = coerceArray(data, true);\n if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }\n\n var padder = data[data.length - 1];\n if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }\n\n var length = data.length - padder;\n for (var i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new Error('PKCS#7 invalid padding byte');\n }\n }\n\n var result = createArray(length);\n copyArray(data, result, 0, 0, length);\n return result;\n }\n\n ///////////////////////\n // Exporting\n\n\n // The block cipher\n var aesjs = {\n AES: AES,\n Counter: Counter,\n\n ModeOfOperation: {\n ecb: ModeOfOperationECB,\n cbc: ModeOfOperationCBC,\n cfb: ModeOfOperationCFB,\n ofb: ModeOfOperationOFB,\n ctr: ModeOfOperationCTR\n },\n\n utils: {\n hex: convertHex,\n utf8: convertUtf8\n },\n\n padding: {\n pkcs7: {\n pad: pkcs7pad,\n strip: pkcs7strip\n }\n },\n\n _arrayTest: {\n coerceArray: coerceArray,\n createArray: createArray,\n copyArray: copyArray,\n }\n };\n\n\n // node.js\n if (typeof exports !== 'undefined') {\n module.exports = aesjs\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define(aesjs);\n\n // Web Browsers\n } else {\n\n // If there was an existing library at \"aesjs\" make sure it's still available\n if (root.aesjs) {\n aesjs._aesjs = root.aesjs;\n }\n\n root.aesjs = aesjs;\n }\n\n\n})(this);\n\n},{}],2:[function(require,module,exports){\n(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n\n},{\"buffer\":4}],3:[function(require,module,exports){\nvar randomBytes = require('../../src.ts/utils').randomBytes; module.exports = function(length) { return randomBytes(length); };\n},{\"../../src.ts/utils\":60}],4:[function(require,module,exports){\n\n},{}],5:[function(require,module,exports){\n'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.hmacDRBG = require('./elliptic/hmac-drbg');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n\n},{\"../package.json\":19,\"./elliptic/curve\":8,\"./elliptic/curves\":11,\"./elliptic/ec\":12,\"./elliptic/eddsa\":15,\"./elliptic/hmac-drbg\":16,\"./elliptic/utils\":18,\"brorand\":3}],6:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a]);\n naf[b] = getNAF(coeffs[b], wndWidth[b]);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n\n},{\"../../elliptic\":5,\"bn.js\":2}],7:[function(require,module,exports){\nmodule.exports = {};\n},{}],8:[function(require,module,exports){\n'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n\n},{\"./base\":6,\"./edwards\":7,\"./mont\":9,\"./short\":10}],9:[function(require,module,exports){\narguments[4][7][0].apply(exports,arguments)\n},{\"dup\":7}],10:[function(require,module,exports){\n'use strict';\n\nvar curve = require('../curve');\nvar elliptic = require('../../elliptic');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n return false;\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\n},{\"../../elliptic\":5,\"../curve\":8,\"bn.js\":2,\"inherits\":33}],11:[function(require,module,exports){\n'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar elliptic = require('../elliptic');\n\nvar assert = elliptic.utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new elliptic.curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new elliptic.curve.edwards(options);\n else\n this.curve = new elliptic.curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n\n},{\"../elliptic\":5,\"./precomputed/secp256k1\":17,\"hash.js\":20}],12:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n options = elliptic.curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof elliptic.curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new elliptic.hmacDRBG({\n hash: this.hash,\n pers: options.pers,\n entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n nonce: this.n.toArray()\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n do {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new elliptic.hmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; true; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n\n if (!this.curve._maxwellTrick) {\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n\n},{\"../../elliptic\":5,\"./key\":13,\"./signature\":14,\"bn.js\":2}],13:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n\n},{\"../../elliptic\":5,\"bn.js\":2}],14:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n }\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0 && (r[1] & 0x80)) {\n r = r.slice(1);\n }\n if (s[0] === 0 && (s[1] & 0x80)) {\n s = s.slice(1);\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n\n},{\"../../elliptic\":5,\"bn.js\":2}],15:[function(require,module,exports){\narguments[4][7][0].apply(exports,arguments)\n},{\"dup\":7}],16:[function(require,module,exports){\n'use strict';\n\nvar hash = require('hash.js');\nvar elliptic = require('../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this.reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc);\n var nonce = utils.toArray(options.nonce, options.nonceEnc);\n var pers = utils.toArray(options.pers, options.persEnc);\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this.reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toBuffer(entropy, entropyEnc);\n add = utils.toBuffer(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this.reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this.reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc);\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this.reseed++;\n return utils.encode(res, enc);\n};\n\n},{\"../elliptic\":5,\"hash.js\":20}],17:[function(require,module,exports){\nmodule.exports = undefined;\n},{}],18:[function(require,module,exports){\n'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\n\nutils.assert = function assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n};\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (!enc) {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n var naf = [];\n var ws = 1 << (w + 1);\n var k = num.clone();\n while (k.cmpn(1) >= 0) {\n var z;\n if (k.isOdd()) {\n var mod = k.andln(ws - 1);\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n naf.push(z);\n\n // Optimization, shift by word if possible\n var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n for (var i = 1; i < shift; i++)\n naf.push(0);\n k.iushrn(shift);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n\n},{\"bn.js\":2}],19:[function(require,module,exports){\nmodule.exports={\"version\":\"6.3.3\"}\n},{}],20:[function(require,module,exports){\nvar hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n\n},{\"./hash/common\":21,\"./hash/hmac\":22,\"./hash/ripemd\":23,\"./hash/sha\":24,\"./hash/utils\":31}],21:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n\n},{\"./utils\":31,\"minimalistic-assert\":35}],22:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n\n},{\"./utils\":31,\"minimalistic-assert\":35}],23:[function(require,module,exports){\nmodule.exports = {ripemd160: null}\n},{}],24:[function(require,module,exports){\n'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n\n},{\"./sha/1\":25,\"./sha/224\":26,\"./sha/256\":27,\"./sha/384\":28,\"./sha/512\":29}],25:[function(require,module,exports){\narguments[4][7][0].apply(exports,arguments)\n},{\"dup\":7}],26:[function(require,module,exports){\narguments[4][7][0].apply(exports,arguments)\n},{\"dup\":7}],27:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":21,\"../utils\":31,\"./common\":30,\"minimalistic-assert\":35}],28:[function(require,module,exports){\narguments[4][7][0].apply(exports,arguments)\n},{\"dup\":7}],29:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\n},{\"../common\":21,\"../utils\":31,\"minimalistic-assert\":35}],30:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n\n},{\"../utils\":31}],31:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n\n},{\"inherits\":32,\"minimalistic-assert\":35}],32:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n\n},{}],33:[function(require,module,exports){\narguments[4][32][0].apply(exports,arguments)\n},{\"dup\":32}],34:[function(require,module,exports){\n(function (process,global){\n/**\r\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\r\n *\r\n * @version 0.5.7\r\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n * @copyright Chen, Yi-Cyuan 2015-2016\r\n * @license MIT\r\n */\r\n/*jslint bitwise: true */\r\n(function () {\r\n 'use strict';\r\n\r\n var root = typeof window === 'object' ? window : {};\r\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\r\n if (NODE_JS) {\r\n root = global;\r\n }\r\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\r\n var HEX_CHARS = '0123456789abcdef'.split('');\r\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\r\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\r\n var PADDING = [6, 1536, 393216, 100663296];\r\n var SHIFT = [0, 8, 16, 24];\r\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\r\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\r\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\r\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\r\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\r\n var BITS = [224, 256, 384, 512];\r\n var SHAKE_BITS = [128, 256];\r\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array'];\r\n\r\n var createOutputMethod = function (bits, padding, outputType) {\r\n return function (message) {\r\n return new Keccak(bits, padding, bits).update(message)[outputType]();\r\n };\r\n };\r\n\r\n var createShakeOutputMethod = function (bits, padding, outputType) {\r\n return function (message, outputBits) {\r\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\r\n };\r\n };\r\n\r\n var createMethod = function (bits, padding) {\r\n var method = createOutputMethod(bits, padding, 'hex');\r\n method.create = function () {\r\n return new Keccak(bits, padding, bits);\r\n };\r\n method.update = function (message) {\r\n return method.create().update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createOutputMethod(bits, padding, type);\r\n }\r\n return method;\r\n };\r\n\r\n var createShakeMethod = function (bits, padding) {\r\n var method = createShakeOutputMethod(bits, padding, 'hex');\r\n method.create = function (outputBits) {\r\n return new Keccak(bits, padding, outputBits);\r\n };\r\n method.update = function (message, outputBits) {\r\n return method.create(outputBits).update(message);\r\n };\r\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\r\n var type = OUTPUT_TYPES[i];\r\n method[type] = createShakeOutputMethod(bits, padding, type);\r\n }\r\n return method;\r\n };\r\n\r\n var algorithms = [\r\n {name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod},\r\n {name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod},\r\n {name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod}\r\n ];\r\n\r\n var methods = {}, methodNames = [];\r\n\r\n for (var i = 0; i < algorithms.length; ++i) {\r\n var algorithm = algorithms[i];\r\n var bits = algorithm.bits;\r\n for (var j = 0; j < bits.length; ++j) {\r\n var methodName = algorithm.name +'_' + bits[j];\r\n methodNames.push(methodName);\r\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\r\n }\r\n }\r\n\r\n function Keccak(bits, padding, outputBits) {\r\n this.blocks = [];\r\n this.s = [];\r\n this.padding = padding;\r\n this.outputBits = outputBits;\r\n this.reset = true;\r\n this.block = 0;\r\n this.start = 0;\r\n this.blockCount = (1600 - (bits << 1)) >> 5;\r\n this.byteCount = this.blockCount << 2;\r\n this.outputBlocks = outputBits >> 5;\r\n this.extraBytes = (outputBits & 31) >> 3;\r\n\r\n for (var i = 0; i < 50; ++i) {\r\n this.s[i] = 0;\r\n }\r\n }\r\n\r\n Keccak.prototype.update = function (message) {\r\n var notString = typeof message !== 'string';\r\n if (notString && message.constructor === ArrayBuffer) {\r\n message = new Uint8Array(message);\r\n }\r\n var length = message.length, blocks = this.blocks, byteCount = this.byteCount,\r\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\r\n\r\n while (index < length) {\r\n if (this.reset) {\r\n this.reset = false;\r\n blocks[0] = this.block;\r\n for (i = 1; i < blockCount + 1; ++i) {\r\n blocks[i] = 0;\r\n }\r\n }\r\n if (notString) {\r\n for (i = this.start; index < length && i < byteCount; ++index) {\r\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\r\n }\r\n } else {\r\n for (i = this.start; index < length && i < byteCount; ++index) {\r\n code = message.charCodeAt(index);\r\n if (code < 0x80) {\r\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\r\n } else if (code < 0x800) {\r\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else if (code < 0xd800 || code >= 0xe000) {\r\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n } else {\r\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\r\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\r\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\r\n }\r\n }\r\n }\r\n this.lastByteIndex = i;\r\n if (i >= byteCount) {\r\n this.start = i - byteCount;\r\n this.block = blocks[blockCount];\r\n for (i = 0; i < blockCount; ++i) {\r\n s[i] ^= blocks[i];\r\n }\r\n f(s);\r\n this.reset = true;\r\n } else {\r\n this.start = i;\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n Keccak.prototype.finalize = function () {\r\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\r\n blocks[i >> 2] |= this.padding[i & 3];\r\n if (this.lastByteIndex === this.byteCount) {\r\n blocks[0] = blocks[blockCount];\r\n for (i = 1; i < blockCount + 1; ++i) {\r\n blocks[i] = 0;\r\n }\r\n }\r\n blocks[blockCount - 1] |= 0x80000000;\r\n for (i = 0; i < blockCount; ++i) {\r\n s[i] ^= blocks[i];\r\n }\r\n f(s);\r\n };\r\n\r\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes, i = 0, j = 0;\r\n var hex = '', block;\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n block = s[i];\r\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\r\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\r\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\r\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\r\n }\r\n if (j % blockCount === 0) {\r\n f(s);\r\n i = 0;\r\n }\r\n }\r\n if (extraBytes) {\r\n block = s[i];\r\n if (extraBytes > 0) {\r\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\r\n }\r\n if (extraBytes > 1) {\r\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\r\n }\r\n if (extraBytes > 2) {\r\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\r\n }\r\n }\r\n return hex;\r\n };\r\n\r\n Keccak.prototype.arrayBuffer = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes, i = 0, j = 0;\r\n var bytes = this.outputBits >> 3;\r\n var buffer;\r\n if (extraBytes) {\r\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\r\n } else {\r\n buffer = new ArrayBuffer(bytes);\r\n }\r\n var array = new Uint32Array(buffer);\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n array[j] = s[i];\r\n }\r\n if (j % blockCount === 0) {\r\n f(s);\r\n }\r\n }\r\n if (extraBytes) {\r\n array[i] = s[i];\r\n buffer = buffer.slice(0, bytes);\r\n }\r\n return buffer;\r\n };\r\n\r\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\r\n\r\n Keccak.prototype.digest = Keccak.prototype.array = function () {\r\n this.finalize();\r\n\r\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\r\n extraBytes = this.extraBytes, i = 0, j = 0;\r\n var array = [], offset, block;\r\n while (j < outputBlocks) {\r\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\r\n offset = j << 2;\r\n block = s[i];\r\n array[offset] = block & 0xFF;\r\n array[offset + 1] = (block >> 8) & 0xFF;\r\n array[offset + 2] = (block >> 16) & 0xFF;\r\n array[offset + 3] = (block >> 24) & 0xFF;\r\n }\r\n if (j % blockCount === 0) {\r\n f(s);\r\n }\r\n }\r\n if (extraBytes) {\r\n offset = j << 2;\r\n block = s[i];\r\n if (extraBytes > 0) {\r\n array[offset] = block & 0xFF;\r\n }\r\n if (extraBytes > 1) {\r\n array[offset + 1] = (block >> 8) & 0xFF;\r\n }\r\n if (extraBytes > 2) {\r\n array[offset + 2] = (block >> 16) & 0xFF;\r\n }\r\n }\r\n return array;\r\n };\r\n\r\n var f = function (s) {\r\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\r\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\r\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\r\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\r\n for (n = 0; n < 48; n += 2) {\r\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\r\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\r\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\r\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\r\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\r\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\r\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\r\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\r\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\r\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\r\n\r\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\r\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\r\n s[0] ^= h;\r\n s[1] ^= l;\r\n s[10] ^= h;\r\n s[11] ^= l;\r\n s[20] ^= h;\r\n s[21] ^= l;\r\n s[30] ^= h;\r\n s[31] ^= l;\r\n s[40] ^= h;\r\n s[41] ^= l;\r\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\r\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\r\n s[2] ^= h;\r\n s[3] ^= l;\r\n s[12] ^= h;\r\n s[13] ^= l;\r\n s[22] ^= h;\r\n s[23] ^= l;\r\n s[32] ^= h;\r\n s[33] ^= l;\r\n s[42] ^= h;\r\n s[43] ^= l;\r\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\r\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\r\n s[4] ^= h;\r\n s[5] ^= l;\r\n s[14] ^= h;\r\n s[15] ^= l;\r\n s[24] ^= h;\r\n s[25] ^= l;\r\n s[34] ^= h;\r\n s[35] ^= l;\r\n s[44] ^= h;\r\n s[45] ^= l;\r\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\r\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\r\n s[6] ^= h;\r\n s[7] ^= l;\r\n s[16] ^= h;\r\n s[17] ^= l;\r\n s[26] ^= h;\r\n s[27] ^= l;\r\n s[36] ^= h;\r\n s[37] ^= l;\r\n s[46] ^= h;\r\n s[47] ^= l;\r\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\r\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\r\n s[8] ^= h;\r\n s[9] ^= l;\r\n s[18] ^= h;\r\n s[19] ^= l;\r\n s[28] ^= h;\r\n s[29] ^= l;\r\n s[38] ^= h;\r\n s[39] ^= l;\r\n s[48] ^= h;\r\n s[49] ^= l;\r\n\r\n b0 = s[0];\r\n b1 = s[1];\r\n b32 = (s[11] << 4) | (s[10] >>> 28);\r\n b33 = (s[10] << 4) | (s[11] >>> 28);\r\n b14 = (s[20] << 3) | (s[21] >>> 29);\r\n b15 = (s[21] << 3) | (s[20] >>> 29);\r\n b46 = (s[31] << 9) | (s[30] >>> 23);\r\n b47 = (s[30] << 9) | (s[31] >>> 23);\r\n b28 = (s[40] << 18) | (s[41] >>> 14);\r\n b29 = (s[41] << 18) | (s[40] >>> 14);\r\n b20 = (s[2] << 1) | (s[3] >>> 31);\r\n b21 = (s[3] << 1) | (s[2] >>> 31);\r\n b2 = (s[13] << 12) | (s[12] >>> 20);\r\n b3 = (s[12] << 12) | (s[13] >>> 20);\r\n b34 = (s[22] << 10) | (s[23] >>> 22);\r\n b35 = (s[23] << 10) | (s[22] >>> 22);\r\n b16 = (s[33] << 13) | (s[32] >>> 19);\r\n b17 = (s[32] << 13) | (s[33] >>> 19);\r\n b48 = (s[42] << 2) | (s[43] >>> 30);\r\n b49 = (s[43] << 2) | (s[42] >>> 30);\r\n b40 = (s[5] << 30) | (s[4] >>> 2);\r\n b41 = (s[4] << 30) | (s[5] >>> 2);\r\n b22 = (s[14] << 6) | (s[15] >>> 26);\r\n b23 = (s[15] << 6) | (s[14] >>> 26);\r\n b4 = (s[25] << 11) | (s[24] >>> 21);\r\n b5 = (s[24] << 11) | (s[25] >>> 21);\r\n b36 = (s[34] << 15) | (s[35] >>> 17);\r\n b37 = (s[35] << 15) | (s[34] >>> 17);\r\n b18 = (s[45] << 29) | (s[44] >>> 3);\r\n b19 = (s[44] << 29) | (s[45] >>> 3);\r\n b10 = (s[6] << 28) | (s[7] >>> 4);\r\n b11 = (s[7] << 28) | (s[6] >>> 4);\r\n b42 = (s[17] << 23) | (s[16] >>> 9);\r\n b43 = (s[16] << 23) | (s[17] >>> 9);\r\n b24 = (s[26] << 25) | (s[27] >>> 7);\r\n b25 = (s[27] << 25) | (s[26] >>> 7);\r\n b6 = (s[36] << 21) | (s[37] >>> 11);\r\n b7 = (s[37] << 21) | (s[36] >>> 11);\r\n b38 = (s[47] << 24) | (s[46] >>> 8);\r\n b39 = (s[46] << 24) | (s[47] >>> 8);\r\n b30 = (s[8] << 27) | (s[9] >>> 5);\r\n b31 = (s[9] << 27) | (s[8] >>> 5);\r\n b12 = (s[18] << 20) | (s[19] >>> 12);\r\n b13 = (s[19] << 20) | (s[18] >>> 12);\r\n b44 = (s[29] << 7) | (s[28] >>> 25);\r\n b45 = (s[28] << 7) | (s[29] >>> 25);\r\n b26 = (s[38] << 8) | (s[39] >>> 24);\r\n b27 = (s[39] << 8) | (s[38] >>> 24);\r\n b8 = (s[48] << 14) | (s[49] >>> 18);\r\n b9 = (s[49] << 14) | (s[48] >>> 18);\r\n\r\n s[0] = b0 ^ (~b2 & b4);\r\n s[1] = b1 ^ (~b3 & b5);\r\n s[10] = b10 ^ (~b12 & b14);\r\n s[11] = b11 ^ (~b13 & b15);\r\n s[20] = b20 ^ (~b22 & b24);\r\n s[21] = b21 ^ (~b23 & b25);\r\n s[30] = b30 ^ (~b32 & b34);\r\n s[31] = b31 ^ (~b33 & b35);\r\n s[40] = b40 ^ (~b42 & b44);\r\n s[41] = b41 ^ (~b43 & b45);\r\n s[2] = b2 ^ (~b4 & b6);\r\n s[3] = b3 ^ (~b5 & b7);\r\n s[12] = b12 ^ (~b14 & b16);\r\n s[13] = b13 ^ (~b15 & b17);\r\n s[22] = b22 ^ (~b24 & b26);\r\n s[23] = b23 ^ (~b25 & b27);\r\n s[32] = b32 ^ (~b34 & b36);\r\n s[33] = b33 ^ (~b35 & b37);\r\n s[42] = b42 ^ (~b44 & b46);\r\n s[43] = b43 ^ (~b45 & b47);\r\n s[4] = b4 ^ (~b6 & b8);\r\n s[5] = b5 ^ (~b7 & b9);\r\n s[14] = b14 ^ (~b16 & b18);\r\n s[15] = b15 ^ (~b17 & b19);\r\n s[24] = b24 ^ (~b26 & b28);\r\n s[25] = b25 ^ (~b27 & b29);\r\n s[34] = b34 ^ (~b36 & b38);\r\n s[35] = b35 ^ (~b37 & b39);\r\n s[44] = b44 ^ (~b46 & b48);\r\n s[45] = b45 ^ (~b47 & b49);\r\n s[6] = b6 ^ (~b8 & b0);\r\n s[7] = b7 ^ (~b9 & b1);\r\n s[16] = b16 ^ (~b18 & b10);\r\n s[17] = b17 ^ (~b19 & b11);\r\n s[26] = b26 ^ (~b28 & b20);\r\n s[27] = b27 ^ (~b29 & b21);\r\n s[36] = b36 ^ (~b38 & b30);\r\n s[37] = b37 ^ (~b39 & b31);\r\n s[46] = b46 ^ (~b48 & b40);\r\n s[47] = b47 ^ (~b49 & b41);\r\n s[8] = b8 ^ (~b0 & b2);\r\n s[9] = b9 ^ (~b1 & b3);\r\n s[18] = b18 ^ (~b10 & b12);\r\n s[19] = b19 ^ (~b11 & b13);\r\n s[28] = b28 ^ (~b20 & b22);\r\n s[29] = b29 ^ (~b21 & b23);\r\n s[38] = b38 ^ (~b30 & b32);\r\n s[39] = b39 ^ (~b31 & b33);\r\n s[48] = b48 ^ (~b40 & b42);\r\n s[49] = b49 ^ (~b41 & b43);\r\n\r\n s[0] ^= RC[n];\r\n s[1] ^= RC[n + 1];\r\n }\r\n };\r\n\r\n if (COMMON_JS) {\r\n module.exports = methods;\r\n } else {\r\n for (var i = 0; i < methodNames.length; ++i) {\r\n root[methodNames[i]] = methods[methodNames[i]];\r\n }\r\n }\r\n})();\r\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":36}],35:[function(require,module,exports){\nmodule.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n\n},{}],36:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],37:[function(require,module,exports){\n\"use strict\";\n\n(function(root) {\n var MAX_VALUE = 0x7fffffff;\n\n // The SHA256 and PBKDF2 implementation are from scrypt-async-js:\n // See: https://github.com/dchest/scrypt-async-js\n function SHA256(m) {\n var K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n ];\n\n var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;\n var h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;\n var w = new Array(64);\n\n function blocks(p) {\n var off = 0, len = p.length;\n while (len >= 64) {\n var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2;\n\n for (i = 0; i < 16; i++) {\n j = off + i*4;\n w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) |\n ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff);\n }\n\n for (i = 16; i < 64; i++) {\n u = w[i-2];\n t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10);\n\n u = w[i-15];\n t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3);\n\n w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0;\n }\n\n for (i = 0; i < 64; i++) {\n t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^\n ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n\n t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^\n ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n h0 = (h0 + a) | 0;\n h1 = (h1 + b) | 0;\n h2 = (h2 + c) | 0;\n h3 = (h3 + d) | 0;\n h4 = (h4 + e) | 0;\n h5 = (h5 + f) | 0;\n h6 = (h6 + g) | 0;\n h7 = (h7 + h) | 0;\n\n off += 64;\n len -= 64;\n }\n }\n\n blocks(m);\n\n var i, bytesLeft = m.length % 64,\n bitLenHi = (m.length / 0x20000000) | 0,\n bitLenLo = m.length << 3,\n numZeros = (bytesLeft < 56) ? 56 : 120,\n p = m.slice(m.length - bytesLeft, m.length);\n\n p.push(0x80);\n for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); }\n p.push((bitLenHi>>>24) & 0xff);\n p.push((bitLenHi>>>16) & 0xff);\n p.push((bitLenHi>>>8) & 0xff);\n p.push((bitLenHi>>>0) & 0xff);\n p.push((bitLenLo>>>24) & 0xff);\n p.push((bitLenLo>>>16) & 0xff);\n p.push((bitLenLo>>>8) & 0xff);\n p.push((bitLenLo>>>0) & 0xff);\n\n blocks(p);\n\n return [\n (h0>>>24) & 0xff, (h0>>>16) & 0xff, (h0>>>8) & 0xff, (h0>>>0) & 0xff,\n (h1>>>24) & 0xff, (h1>>>16) & 0xff, (h1>>>8) & 0xff, (h1>>>0) & 0xff,\n (h2>>>24) & 0xff, (h2>>>16) & 0xff, (h2>>>8) & 0xff, (h2>>>0) & 0xff,\n (h3>>>24) & 0xff, (h3>>>16) & 0xff, (h3>>>8) & 0xff, (h3>>>0) & 0xff,\n (h4>>>24) & 0xff, (h4>>>16) & 0xff, (h4>>>8) & 0xff, (h4>>>0) & 0xff,\n (h5>>>24) & 0xff, (h5>>>16) & 0xff, (h5>>>8) & 0xff, (h5>>>0) & 0xff,\n (h6>>>24) & 0xff, (h6>>>16) & 0xff, (h6>>>8) & 0xff, (h6>>>0) & 0xff,\n (h7>>>24) & 0xff, (h7>>>16) & 0xff, (h7>>>8) & 0xff, (h7>>>0) & 0xff\n ];\n }\n\n function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) {\n // compress password if it's longer than hash block length\n password = password.length <= 64 ? password : SHA256(password);\n\n var i;\n var innerLen = 64 + salt.length + 4;\n var inner = new Array(innerLen);\n var outerKey = new Array(64);\n var dk = [];\n\n // inner = (password ^ ipad) || salt || counter\n for (i = 0; i < 64; i++) inner[i] = 0x36;\n for (i = 0; i < password.length; i++) inner[i] ^= password[i];\n for (i = 0; i < salt.length; i++) inner[64+i] = salt[i];\n for (i = innerLen - 4; i < innerLen; i++) inner[i] = 0;\n\n // outerKey = password ^ opad\n for (i = 0; i < 64; i++) outerKey[i] = 0x5c;\n for (i = 0; i < password.length; i++) outerKey[i] ^= password[i];\n\n // increments counter inside inner\n function incrementCounter() {\n for (var i = innerLen-1; i >= innerLen-4; i--) {\n inner[i]++;\n if (inner[i] <= 0xff) return;\n inner[i] = 0;\n }\n }\n\n // output blocks = SHA256(outerKey || SHA256(inner)) ...\n while (dkLen >= 32) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))));\n dkLen -= 32;\n }\n if (dkLen > 0) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen));\n }\n\n return dk;\n }\n\n // The following is an adaptation of scryptsy\n // See: https://www.npmjs.com/package/scryptsy\n function blockmix_salsa8(BY, Yi, r, x, _X) {\n var i;\n\n arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16);\n for (i = 0; i < 2 * r; i++) {\n blockxor(BY, i * 16, _X, 16);\n salsa20_8(_X, x);\n arraycopy(_X, 0, BY, Yi + (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16);\n }\n }\n\n function R(a, b) {\n return (a << b) | (a >>> (32 - b));\n }\n\n function salsa20_8(B, x) {\n arraycopy(B, 0, x, 0, 16);\n\n for (var i = 8; i > 0; i -= 2) {\n x[ 4] ^= R(x[ 0] + x[12], 7);\n x[ 8] ^= R(x[ 4] + x[ 0], 9);\n x[12] ^= R(x[ 8] + x[ 4], 13);\n x[ 0] ^= R(x[12] + x[ 8], 18);\n x[ 9] ^= R(x[ 5] + x[ 1], 7);\n x[13] ^= R(x[ 9] + x[ 5], 9);\n x[ 1] ^= R(x[13] + x[ 9], 13);\n x[ 5] ^= R(x[ 1] + x[13], 18);\n x[14] ^= R(x[10] + x[ 6], 7);\n x[ 2] ^= R(x[14] + x[10], 9);\n x[ 6] ^= R(x[ 2] + x[14], 13);\n x[10] ^= R(x[ 6] + x[ 2], 18);\n x[ 3] ^= R(x[15] + x[11], 7);\n x[ 7] ^= R(x[ 3] + x[15], 9);\n x[11] ^= R(x[ 7] + x[ 3], 13);\n x[15] ^= R(x[11] + x[ 7], 18);\n x[ 1] ^= R(x[ 0] + x[ 3], 7);\n x[ 2] ^= R(x[ 1] + x[ 0], 9);\n x[ 3] ^= R(x[ 2] + x[ 1], 13);\n x[ 0] ^= R(x[ 3] + x[ 2], 18);\n x[ 6] ^= R(x[ 5] + x[ 4], 7);\n x[ 7] ^= R(x[ 6] + x[ 5], 9);\n x[ 4] ^= R(x[ 7] + x[ 6], 13);\n x[ 5] ^= R(x[ 4] + x[ 7], 18);\n x[11] ^= R(x[10] + x[ 9], 7);\n x[ 8] ^= R(x[11] + x[10], 9);\n x[ 9] ^= R(x[ 8] + x[11], 13);\n x[10] ^= R(x[ 9] + x[ 8], 18);\n x[12] ^= R(x[15] + x[14], 7);\n x[13] ^= R(x[12] + x[15], 9);\n x[14] ^= R(x[13] + x[12], 13);\n x[15] ^= R(x[14] + x[13], 18);\n }\n\n for (i = 0; i < 16; ++i) {\n B[i] += x[i];\n }\n }\n\n // naive approach... going back to loop unrolling may yield additional performance\n function blockxor(S, Si, D, len) {\n for (var i = 0; i < len; i++) {\n D[i] ^= S[Si + i]\n }\n }\n\n function arraycopy(src, srcPos, dest, destPos, length) {\n while (length--) {\n dest[destPos++] = src[srcPos++];\n }\n }\n\n function checkBufferish(o) {\n if (!o || typeof(o.length) !== 'number') {\n return false;\n }\n for (var i = 0; i < o.length; i++) {\n if (typeof(o[i]) !== 'number') { return false; }\n\n var v = parseInt(o[i]);\n if (v != o[i] || v < 0 || v >= 256) {\n return false;\n }\n }\n return true;\n }\n\n function ensureInteger(value, name) {\n var intValue = parseInt(value);\n if (value != intValue) { throw new Error('invalid ' + name); }\n return intValue;\n }\n\n // N = Cpu cost, r = Memory cost, p = parallelization cost\n // callback(error, progress, key)\n function scrypt(password, salt, N, r, p, dkLen, callback) {\n\n if (!callback) { throw new Error('missing callback'); }\n\n N = ensureInteger(N, 'N');\n r = ensureInteger(r, 'r');\n p = ensureInteger(p, 'p');\n\n dkLen = ensureInteger(dkLen, 'dkLen');\n\n if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); }\n\n if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); }\n if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); }\n\n if (!checkBufferish(password)) {\n throw new Error('password must be an array or buffer');\n }\n\n if (!checkBufferish(salt)) {\n throw new Error('salt must be an array or buffer');\n }\n\n var b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r);\n var B = new Uint32Array(p * 32 * r)\n for (var i = 0; i < B.length; i++) {\n var j = i * 4;\n B[i] = ((b[j + 3] & 0xff) << 24) |\n ((b[j + 2] & 0xff) << 16) |\n ((b[j + 1] & 0xff) << 8) |\n ((b[j + 0] & 0xff) << 0);\n }\n\n var XY = new Uint32Array(64 * r);\n var V = new Uint32Array(32 * r * N);\n\n var Yi = 32 * r;\n\n // scratch space\n var x = new Uint32Array(16); // salsa20_8\n var _X = new Uint32Array(16); // blockmix_salsa8\n\n var totalOps = p * N * 2;\n var currentOp = 0;\n var lastPercent10 = null;\n\n // Set this to true to abandon the scrypt on the next step\n var stop = false;\n\n // State information\n var state = 0;\n var i0 = 0, i1;\n var Bi;\n\n // How many blockmix_salsa8 can we do per step?\n var limit = parseInt(1000 / r);\n\n // Trick from scrypt-async; if there is a setImmediate shim in place, use it\n var nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout;\n\n // This is really all I changed; making scryptsy a state machine so we occasionally\n // stop and give other evnts on the evnt loop a chance to run. ~RicMoo\n var incrementalSMix = function() {\n if (stop) {\n return callback(new Error('cancelled'), currentOp / totalOps);\n }\n\n switch (state) {\n case 0:\n // for (var i = 0; i < p; i++)...\n Bi = i0 * 32 * r;\n\n arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1\n\n state = 1; // Move to ROMix 2\n i1 = 0;\n\n // Fall through\n\n case 1:\n\n // Run up to 1000 steps of the first inner smix loop\n var steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (var i = 0; i < steps; i++) { // ROMix - 2\n arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4\n }\n\n // for (var i = 0; i < N; i++)\n i1 += steps;\n currentOp += steps;\n\n // Call the callback with the progress (optionally stopping us)\n var percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n\n if (i1 < N) {\n break;\n }\n\n i1 = 0; // Move to ROMix 6\n state = 2;\n\n // Fall through\n\n case 2:\n\n // Run up to 1000 steps of the second inner smix loop\n var steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (var i = 0; i < steps; i++) { // ROMix - 6\n var offset = (2 * r - 1) * 16; // ROMix - 7\n var j = XY[offset] & (N - 1);\n blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner)\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer)\n }\n\n // for (var i = 0; i < N; i++)...\n i1 += steps;\n currentOp += steps;\n\n // Call the callback with the progress (optionally stopping us)\n var percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n\n if (i1 < N) {\n break;\n }\n\n arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10\n\n // for (var i = 0; i < p; i++)...\n i0++;\n if (i0 < p) {\n state = 0;\n break;\n }\n\n b = [];\n for (var i = 0; i < B.length; i++) {\n b.push((B[i] >> 0) & 0xff);\n b.push((B[i] >> 8) & 0xff);\n b.push((B[i] >> 16) & 0xff);\n b.push((B[i] >> 24) & 0xff);\n }\n\n var derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen);\n\n // Done; don't break (which would reschedule)\n return callback(null, 1.0, derivedKey);\n }\n\n // Schedule the next steps\n nextTick(incrementalSMix);\n }\n\n // Bootstrap the incremental smix\n incrementalSMix();\n }\n\n // node.js\n if (typeof(exports) !== 'undefined') {\n module.exports = scrypt;\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define(scrypt);\n\n // Web Browsers\n } else if (root) {\n\n // If there was an existing library \"scrypt\", make sure it is still available\n if (root.scrypt) {\n root._scrypt = root.scrypt;\n }\n\n root.scrypt = scrypt;\n }\n\n})(this);\n\n},{}],38:[function(require,module,exports){\n(function (global){\n\nvar rng;\n\nif (global.crypto && crypto.getRandomValues) {\n // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n // Moderately fast, high quality\n var _rnds8 = new Uint8Array(16);\n rng = function whatwgRNG() {\n crypto.getRandomValues(_rnds8);\n return _rnds8;\n };\n}\n\nif (!rng) {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var _rnds = new Array(16);\n rng = function() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return _rnds;\n };\n}\n\nmodule.exports = rng;\n\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],39:[function(require,module,exports){\n// uuid.js\n//\n// Copyright (c) 2010-2012 Robert Kieffer\n// MIT License - http://opensource.org/licenses/mit-license.php\n\n// Unique ID creation requires a high quality random # generator. We feature\n// detect to determine the best RNG source, normalizing to a function that\n// returns 128-bits of randomness, since that's what's usually required\nvar _rng = require('./rng');\n\n// Maps for number <-> hex string conversion\nvar _byteToHex = [];\nvar _hexToByte = {};\nfor (var i = 0; i < 256; i++) {\n _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n _hexToByte[_byteToHex[i]] = i;\n}\n\n// **`parse()` - Parse a UUID into it's component bytes**\nfunction parse(s, buf, offset) {\n var i = (buf && offset) || 0, ii = 0;\n\n buf = buf || [];\n s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\n if (ii < 16) { // Don't overflow!\n buf[i + ii++] = _hexToByte[oct];\n }\n });\n\n // Zero out remaining bytes if string was short\n while (ii < 16) {\n buf[i + ii++] = 0;\n }\n\n return buf;\n}\n\n// **`unparse()` - Convert UUID byte array (ala parse()) into a string**\nfunction unparse(buf, offset) {\n var i = offset || 0, bth = _byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n}\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\n// random #'s we need to init node and clockseq\nvar _seedBytes = _rng();\n\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\nvar _nodeId = [\n _seedBytes[0] | 0x01,\n _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n];\n\n// Per 4.2.2, randomize (14 bit) clockseq\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n// Previous uuid creation time\nvar _lastMSecs = 0, _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n var node = options.node || _nodeId;\n for (var n = 0; n < 6; n++) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : unparse(b);\n}\n\n// **`v4()` - Generate random UUID**\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v4(options, buf, offset) {\n // Deprecated - 'format' argument, as supported in v1.2\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options == 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || _rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ii++) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || unparse(rnds);\n}\n\n// Export public API\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\nuuid.parse = parse;\nuuid.unparse = unparse;\n\nmodule.exports = uuid;\n\n},{\"./rng\":38}],40:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar convert_1 = require(\"../src.ts/utils/convert\");\nmodule.exports = {\n decode: function (textData) {\n textData = atob(textData);\n var data = [];\n for (var i = 0; i < textData.length; i++) {\n data.push(textData.charCodeAt(i));\n }\n return convert_1.arrayify(data);\n },\n encode: function (data) {\n data = convert_1.arrayify(data);\n var textData = '';\n for (var i = 0; i < data.length; i++) {\n textData += String.fromCharCode(data[i]);\n }\n return btoa(textData);\n }\n};\n\n},{\"../src.ts/utils/convert\":56}],41:[function(require,module,exports){\n'use strict';\ntry {\n module.exports.XMLHttpRequest = XMLHttpRequest;\n}\ncatch (error) {\n console.log('Warning: XMLHttpRequest is not defined');\n module.exports.XMLHttpRequest = null;\n}\n\n},{}],42:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar interface_1 = require(\"./interface\");\nvar address_1 = require(\"../utils/address\");\nvar bignumber_1 = require(\"../utils/bignumber\");\nvar properties_1 = require(\"../utils/properties\");\nvar errors = __importStar(require(\"../utils/errors\"));\nvar allowedTransactionKeys = {\n data: true, from: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true\n};\nfunction copyObject(object) {\n var result = {};\n for (var key in object) {\n result[key] = object[key];\n }\n return result;\n}\n// @TODO: Expand this to resolve any promises too\nfunction resolveAddresses(provider, value, paramType) {\n if (Array.isArray(paramType)) {\n var promises = [];\n paramType.forEach(function (paramType, index) {\n var v = null;\n if (Array.isArray(value)) {\n v = value[index];\n }\n else {\n v = value[paramType.name];\n }\n promises.push(resolveAddresses(provider, v, paramType));\n });\n return Promise.all(promises);\n }\n if (paramType.type === 'address') {\n return provider.resolveName(value);\n }\n if (paramType.components) {\n return resolveAddresses(provider, value, paramType.components);\n }\n return Promise.resolve(value);\n}\nfunction runMethod(contract, functionName, estimateOnly) {\n var method = contract.interface.functions[functionName];\n return function () {\n var params = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n params[_i] = arguments[_i];\n }\n var transaction = {};\n // If 1 extra parameter was passed in, it contains overrides\n if (params.length === method.inputs.length + 1 && typeof (params[params.length - 1]) === 'object') {\n transaction = copyObject(params.pop());\n // Check for unexpected keys (e.g. using \"gas\" instead of \"gasLimit\")\n for (var key in transaction) {\n if (!allowedTransactionKeys[key]) {\n throw new Error('unknown transaction override ' + key);\n }\n }\n }\n if (params.length != method.inputs.length) {\n throw new Error('incorrect number of arguments');\n }\n // Check overrides make sense\n ['data', 'to'].forEach(function (key) {\n if (transaction[key] != null) {\n throw new Error('cannot override ' + key);\n }\n });\n // Send to the contract address\n transaction.to = contract.addressPromise;\n return resolveAddresses(contract.provider, params, method.inputs).then(function (params) {\n transaction.data = method.encode(params);\n if (method.type === 'call') {\n // Call (constant functions) always cost 0 ether\n if (estimateOnly) {\n return Promise.resolve(bignumber_1.ConstantZero);\n }\n // Check overrides make sense\n ['gasLimit', 'gasPrice', 'value'].forEach(function (key) {\n if (transaction[key] != null) {\n throw new Error('call cannot override ' + key);\n }\n });\n if (transaction.from == null && contract.signer) {\n if (contract.signer.address) {\n transaction.from = contract.signer.address;\n }\n else if (contract.signer.getAddress) {\n transaction.from = contract.signer.getAddress();\n }\n }\n return properties_1.resolveProperties(transaction).then(function (transaction) {\n return contract.provider.call(transaction).then(function (value) {\n try {\n var result = method.decode(value);\n if (method.outputs.length === 1) {\n result = result[0];\n }\n return result;\n }\n catch (error) {\n if (value === '0x' && method.outputs.length > 0) {\n errors.throwError('call exception', errors.CALL_EXCEPTION, {\n address: contract.address,\n method: method.signature,\n value: params\n });\n }\n throw error;\n }\n });\n });\n }\n else if (method.type === 'transaction') {\n if (!contract.signer) {\n return Promise.reject(new Error('missing signer'));\n }\n // Make sure they aren't overriding something they shouldn't\n if (transaction.from != null) {\n throw new Error('transaction cannot override from');\n }\n // Only computing the transaction estimate\n if (estimateOnly) {\n if (contract.signer.estimateGas) {\n return contract.signer.estimateGas(transaction);\n }\n if (contract.signer.address) {\n transaction.from = contract.signer.address;\n }\n else if (contract.signer.getAddress) {\n transaction.from = contract.signer.getAddress();\n }\n return properties_1.resolveProperties(transaction).then(function (transaction) {\n return contract.provider.estimateGas(transaction);\n });\n }\n // If the signer supports sendTrasaction, use it\n if (contract.signer.sendTransaction) {\n return contract.signer.sendTransaction(transaction);\n }\n if (!contract.signer.sign) {\n return Promise.reject(new Error('custom signer does not support signing'));\n }\n if (transaction.chainId == null) {\n transaction.chainId = contract.provider.getNetwork().then(function (network) {\n return network.chainId;\n });\n }\n if (transaction.gasLimit == null) {\n if (contract.signer.defaultGasLimit) {\n transaction.gasLimit = contract.signer.defaultGasLimit;\n }\n else {\n transaction.gasLimit = 200000;\n }\n }\n if (!transaction.nonce) {\n if (contract.signer.getTransactionCount) {\n transaction.nonce = contract.signer.getTransactionCount();\n }\n else if (contract.signer.address) {\n transaction.nonce = contract.provider.getTransactionCount(contract.signer.address);\n }\n else if (contract.signer.getAddress) {\n transaction.nonce = contract.provider.getTransactionCount(contract.signer.getAddress());\n }\n else {\n throw new Error('cannot determine nonce');\n }\n }\n if (!transaction.gasPrice) {\n if (contract.signer.defaultGasPrice) {\n transaction.gasPrice = contract.signer.defaultGasPrice;\n }\n else {\n transaction.gasPrice = contract.provider.getGasPrice();\n }\n }\n return properties_1.resolveProperties(transaction).then(function (transaction) {\n var signedTransaction = contract.signer.sign(transaction);\n return contract.provider.sendTransaction(signedTransaction);\n });\n }\n throw new Error('invalid type - ' + method.type);\n return null;\n });\n throw new Error('unsupport type - ' + method.type);\n };\n}\nfunction isSigner(value) {\n return (value && value.provider != null);\n}\nvar Contract = /** @class */ (function () {\n // https://github.com/Microsoft/TypeScript/issues/5453\n // Once this issue is resolved (there are open PR) we can do this nicer. :)\n function Contract(addressOrName, contractInterface, signerOrProvider) {\n var _this = this;\n errors.checkNew(this, Contract);\n // @TODO: Maybe still check the addressOrName looks like a valid address or name?\n //address = getAddress(address);\n if (contractInterface instanceof interface_1.Interface) {\n properties_1.defineReadOnly(this, 'interface', contractInterface);\n }\n else {\n properties_1.defineReadOnly(this, 'interface', new interface_1.Interface(contractInterface));\n }\n if (!signerOrProvider) {\n throw new Error('missing signer or provider');\n }\n if (isSigner(signerOrProvider)) {\n properties_1.defineReadOnly(this, 'provider', signerOrProvider.provider);\n properties_1.defineReadOnly(this, 'signer', signerOrProvider);\n }\n else {\n properties_1.defineReadOnly(this, 'provider', signerOrProvider);\n properties_1.defineReadOnly(this, 'signer', null);\n }\n properties_1.defineReadOnly(this, 'estimate', {});\n properties_1.defineReadOnly(this, 'events', {});\n properties_1.defineReadOnly(this, 'functions', {});\n // Not connected to an on-chain instance, so do not connect functions and events\n if (!addressOrName) {\n properties_1.defineReadOnly(this, 'address', null);\n properties_1.defineReadOnly(this, 'addressPromise', Promise.resolve(null));\n return;\n }\n properties_1.defineReadOnly(this, 'address', addressOrName || null);\n properties_1.defineReadOnly(this, 'addressPromise', this.provider.resolveName(addressOrName || null));\n Object.keys(this.interface.functions).forEach(function (name) {\n var run = runMethod(_this, name, false);\n if (_this[name] == null) {\n properties_1.defineReadOnly(_this, name, run);\n }\n else {\n console.log('WARNING: Multiple definitions for ' + name);\n }\n if (_this.functions[name] == null) {\n properties_1.defineReadOnly(_this.functions, name, run);\n properties_1.defineReadOnly(_this.estimate, name, runMethod(_this, name, true));\n }\n });\n Object.keys(this.interface.events).forEach(function (eventName) {\n var eventInfo = _this.interface.events[eventName];\n var eventCallback = null;\n var contract = _this;\n function handleEvent(log) {\n contract.addressPromise.then(function (address) {\n // Not meant for us (the topics just has the same name)\n if (address != log.address) {\n return;\n }\n try {\n var result = eventInfo.decode(log.data, log.topics);\n // Some useful things to have with the log\n log.args = result;\n log.event = eventName;\n log.parse = eventInfo.parse;\n log.removeListener = function () {\n contract.provider.removeListener(eventInfo.topics, handleEvent);\n };\n log.getBlock = function () { return contract.provider.getBlock(log.blockHash); ; };\n log.getTransaction = function () { return contract.provider.getTransaction(log.transactionHash); };\n log.getTransactionReceipt = function () { return contract.provider.getTransactionReceipt(log.transactionHash); };\n log.eventSignature = eventInfo.signature;\n eventCallback.apply(log, Array.prototype.slice.call(result));\n }\n catch (error) {\n console.log(error);\n }\n });\n }\n var property = {\n enumerable: true,\n get: function () {\n return eventCallback;\n },\n set: function (value) {\n if (!value) {\n value = null;\n }\n if (!value && eventCallback) {\n contract.provider.removeListener(eventInfo.topics, handleEvent);\n }\n else if (value && !eventCallback) {\n contract.provider.on(eventInfo.topics, handleEvent);\n }\n eventCallback = value;\n }\n };\n var propertyName = 'on' + eventName.toLowerCase();\n if (_this[propertyName] == null) {\n Object.defineProperty(_this, propertyName, property);\n }\n Object.defineProperty(_this.events, eventName, property);\n }, this);\n }\n // Reconnect to a different signer or provider\n Contract.prototype.connect = function (signerOrProvider) {\n return new Contract(this.address, this.interface, signerOrProvider);\n };\n // Deploy the contract with the bytecode, resolving to the deployed address.\n // Use contract.deployTransaction.wait() to wait until the contract has\n // been mined.\n Contract.prototype.deploy = function (bytecode) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (this.signer == null) {\n throw new Error('missing signer'); // @TODO: errors.throwError\n }\n // @TODO: overrides of args.length = this.interface.deployFunction.inputs.length + 1\n return this.signer.sendTransaction({\n data: this.interface.deployFunction.encode(bytecode, args)\n }).then(function (tx) {\n var contract = new Contract(address_1.getContractAddress(tx), _this.interface, _this.provider);\n properties_1.defineReadOnly(contract, 'deployTransaction', tx);\n return contract;\n });\n };\n return Contract;\n}());\nexports.Contract = Contract;\n\n},{\"../utils/address\":54,\"../utils/bignumber\":55,\"../utils/errors\":57,\"../utils/properties\":64,\"./interface\":44}],43:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contract_1 = require(\"./contract\");\nexports.Contract = contract_1.Contract;\nvar interface_1 = require(\"./interface\");\nexports.Interface = interface_1.Interface;\n\n},{\"./contract\":42,\"./interface\":44}],44:[function(require,module,exports){\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\nvar abi_coder_1 = require(\"../utils/abi-coder\");\nvar bignumber_1 = require(\"../utils/bignumber\");\nvar convert_1 = require(\"../utils/convert\");\nvar keccak256_1 = require(\"../utils/keccak256\");\nvar utf8_1 = require(\"../utils/utf8\");\nvar properties_1 = require(\"../utils/properties\");\nvar errors = __importStar(require(\"../utils/errors\"));\nfunction parseParams(params) {\n var names = [];\n var types = [];\n params.forEach(function (param) {\n if (param.components != null) {\n if (param.type.substring(0, 5) !== 'tuple') {\n throw new Error('internal error; report on GitHub');\n }\n var suffix = '';\n var arrayBracket = param.type.indexOf('[');\n if (arrayBracket >= 0) {\n suffix = param.type.substring(arrayBracket);\n }\n var result = parseParams(param.components);\n names.push({ name: (param.name || null), names: result.names });\n types.push('tuple(' + result.types.join(',') + ')' + suffix);\n }\n else {\n names.push(param.name || null);\n types.push(param.type);\n }\n });\n return {\n names: names,\n types: types\n };\n}\nvar Indexed = /** @class */ (function () {\n function Indexed(value) {\n properties_1.defineReadOnly(this, 'indexed', true);\n properties_1.defineReadOnly(this, 'hash', value);\n }\n return Indexed;\n}());\nexports.Indexed = Indexed;\nvar Description = /** @class */ (function () {\n function Description(info) {\n for (var key in info) {\n var value = info[key];\n if (value != null && typeof (value) === 'object') {\n properties_1.defineFrozen(this, key, info[key]);\n }\n else {\n properties_1.defineReadOnly(this, key, info[key]);\n }\n }\n }\n return Description;\n}());\nexports.Description = Description;\nvar DeployDescription = /** @class */ (function (_super) {\n __extends(DeployDescription, _super);\n function DeployDescription() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DeployDescription.prototype.encode = function (bytecode, params) {\n if (!convert_1.isHexString(bytecode)) {\n errors.throwError('invalid contract bytecode', errors.INVALID_ARGUMENT, {\n arg: 'bytecode',\n type: typeof (bytecode),\n value: bytecode\n });\n }\n if (params.length < this.inputs.length) {\n errors.throwError('missing constructor argument', errors.MISSING_ARGUMENT, {\n arg: (this.inputs[params.length].name || 'unknown'),\n count: params.length,\n expectedCount: this.inputs.length\n });\n }\n else if (params.length > this.inputs.length) {\n errors.throwError('too many constructor arguments', errors.UNEXPECTED_ARGUMENT, {\n count: params.length,\n expectedCount: this.inputs.length\n });\n }\n try {\n return (bytecode + abi_coder_1.defaultAbiCoder.encode(this.inputs, params).substring(2));\n }\n catch (error) {\n errors.throwError('invalid constructor argument', errors.INVALID_ARGUMENT, {\n arg: error.arg,\n reason: error.reason,\n value: error.value\n });\n }\n return null;\n };\n return DeployDescription;\n}(Description));\nexports.DeployDescription = DeployDescription;\nvar FunctionDescription = /** @class */ (function (_super) {\n __extends(FunctionDescription, _super);\n function FunctionDescription() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FunctionDescription.prototype.encode = function (params) {\n if (params.length < this.inputs.length) {\n errors.throwError('missing input argument', errors.MISSING_ARGUMENT, {\n arg: (this.inputs[params.length].name || 'unknown'),\n count: params.length,\n expectedCount: this.inputs.length,\n name: this.name\n });\n }\n else if (params.length > this.inputs.length) {\n errors.throwError('too many input arguments', errors.UNEXPECTED_ARGUMENT, {\n count: params.length,\n expectedCount: this.inputs.length\n });\n }\n try {\n return this.sighash + abi_coder_1.defaultAbiCoder.encode(this.inputs, params).substring(2);\n }\n catch (error) {\n errors.throwError('invalid input argument', errors.INVALID_ARGUMENT, {\n arg: error.arg,\n reason: error.reason,\n value: error.value\n });\n }\n return null;\n };\n FunctionDescription.prototype.decode = function (data) {\n try {\n return abi_coder_1.defaultAbiCoder.decode(this.outputs, convert_1.arrayify(data));\n }\n catch (error) {\n errors.throwError('invalid data for function output', errors.INVALID_ARGUMENT, {\n arg: 'data',\n errorArg: error.arg,\n errorValue: error.value,\n value: data,\n reason: error.reason\n });\n }\n };\n return FunctionDescription;\n}(Description));\nexports.FunctionDescription = FunctionDescription;\n// @TODO: Make this a class\nfunction Result() { }\nvar EventDescription = /** @class */ (function (_super) {\n __extends(EventDescription, _super);\n function EventDescription() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n EventDescription.prototype.decode = function (data, topics) {\n // Strip the signature off of non-anonymous topics\n if (topics != null && !this.anonymous) {\n topics = topics.slice(1);\n }\n var inputIndexed = [], inputNonIndexed = [];\n var inputDynamic = [];\n this.inputs.forEach(function (param, index) {\n if (param.indexed) {\n if (param.type === 'string' || param.type === 'bytes' || param.type.indexOf('[') >= 0 || param.type.substring(0, 5) === 'tuple') {\n inputIndexed.push({ type: 'bytes32', name: (param.name || '') });\n inputDynamic.push(true);\n }\n else {\n inputIndexed.push(param);\n inputDynamic.push(false);\n }\n }\n else {\n inputNonIndexed.push(param);\n inputDynamic.push(false);\n }\n });\n if (topics != null) {\n var resultIndexed = abi_coder_1.defaultAbiCoder.decode(inputIndexed, convert_1.concat(topics));\n }\n var resultNonIndexed = abi_coder_1.defaultAbiCoder.decode(inputNonIndexed, convert_1.arrayify(data));\n var result = new Result();\n var nonIndexedIndex = 0, indexedIndex = 0;\n this.inputs.forEach(function (input, index) {\n if (input.indexed) {\n if (topics == null) {\n result[index] = new Indexed(null);\n }\n else if (inputDynamic[index]) {\n result[index] = new Indexed(resultIndexed[indexedIndex++]);\n }\n else {\n result[index] = resultIndexed[indexedIndex++];\n }\n }\n else {\n result[index] = resultNonIndexed[nonIndexedIndex++];\n }\n if (input.name) {\n result[input.name] = result[index];\n }\n });\n result.length = this.inputs.length;\n return result;\n };\n return EventDescription;\n}(Description));\nexports.EventDescription = EventDescription;\n// @TODO:\n//export class Result {\n// [prop: string]: any;\n//}\nfunction addMethod(method) {\n switch (method.type) {\n case 'constructor': {\n var description = new DeployDescription({\n inputs: method.inputs,\n payable: (method.payable == null || !!method.payable),\n type: 'deploy'\n });\n if (!this.deployFunction) {\n this.deployFunction = description;\n }\n break;\n }\n case 'function': {\n // @TODO: See event\n var signature = '(' + parseParams(method.inputs).types.join(',') + ')';\n signature = signature.replace(/tuple/g, '');\n signature = method.name + signature;\n var sighash = keccak256_1.keccak256(utf8_1.toUtf8Bytes(signature)).substring(0, 10);\n var description = new FunctionDescription({\n inputs: method.inputs,\n outputs: method.outputs,\n payable: (method.payable == null || !!method.payable),\n type: ((method.constant) ? 'call' : 'transaction'),\n signature: signature,\n sighash: sighash,\n });\n // Expose the first (and hopefully unique named function\n if (method.name && this.functions[method.name] == null) {\n properties_1.defineReadOnly(this.functions, method.name, description);\n }\n // Expose all methods by their signature, for overloaded functions\n if (this.functions[description.signature] == null) {\n properties_1.defineReadOnly(this.functions, description.signature, description);\n }\n break;\n }\n case 'event': {\n // @TODO: method.params instead? As well? Different fomrat?\n //let inputParams = parseParams(method.inputs);\n // @TODO: Don't use parseParams (create new function in ABI, formatSignature)\n var signature = '(' + parseParams(method.inputs).types.join(',') + ')';\n signature = signature.replace(/tuple/g, '');\n signature = method.name + signature;\n var description = new EventDescription({\n name: method.name,\n signature: signature,\n inputs: method.inputs,\n topics: [keccak256_1.keccak256(utf8_1.toUtf8Bytes(signature))],\n anonymous: (!!method.anonymous),\n type: 'event'\n });\n // Expose the first (and hopefully unique) event name\n if (method.name && this.events[method.name] == null) {\n properties_1.defineReadOnly(this.events, method.name, description);\n }\n // Expose all events by their signature, for overloaded functions\n if (this.events[description.signature] == null) {\n properties_1.defineReadOnly(this.events, description.signature, description);\n }\n break;\n }\n case 'fallback':\n // Nothing to do for fallback\n break;\n default:\n console.log('WARNING: unsupported ABI type - ' + method.type);\n break;\n }\n}\nvar Interface = /** @class */ (function () {\n function Interface(abi) {\n var _this = this;\n errors.checkNew(this, Interface);\n if (typeof (abi) === 'string') {\n try {\n abi = JSON.parse(abi);\n }\n catch (error) {\n errors.throwError('could not parse ABI JSON', errors.INVALID_ARGUMENT, {\n arg: 'abi',\n errorMessage: error.message,\n value: abi\n });\n }\n if (!Array.isArray(abi)) {\n errors.throwError('invalid abi', errors.INVALID_ARGUMENT, { arg: 'abi', value: abi });\n return null;\n }\n }\n properties_1.defineReadOnly(this, 'functions', {});\n properties_1.defineReadOnly(this, 'events', {});\n // Convert any supported ABI format into a standard ABI format\n this._abi = [];\n abi.forEach(function (fragment) {\n if (typeof (fragment) === 'string') {\n fragment = abi_coder_1.parseSignature(fragment);\n }\n _this._abi.push(fragment);\n });\n this._abi.forEach(addMethod, this);\n // If there wasn't a constructor, create the default constructor\n if (!this.deployFunction) {\n addMethod.call(this, { type: 'constructor', inputs: [] });\n }\n }\n Interface.prototype.parseTransaction = function (tx) {\n var sighash = tx.data.substring(0, 10).toLowerCase();\n for (var name in this.functions) {\n if (name.indexOf('(') === -1) {\n continue;\n }\n var func = this.functions[name];\n if (func.sighash === sighash) {\n var result = abi_coder_1.defaultAbiCoder.decode(func.inputs, '0x' + tx.data.substring(10));\n return {\n args: result,\n signature: func.signature,\n sighash: func.sighash,\n decode: func.decode,\n value: bignumber_1.bigNumberify(tx.value || 0),\n };\n }\n }\n return null;\n };\n return Interface;\n}());\nexports.Interface = Interface;\n\n},{\"../utils/abi-coder\":53,\"../utils/bignumber\":55,\"../utils/convert\":56,\"../utils/errors\":57,\"../utils/keccak256\":61,\"../utils/properties\":64,\"../utils/utf8\":70}],45:[function(require,module,exports){\n\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar provider_1 = require(\"./provider\");\nvar convert_1 = require(\"../utils/convert\");\nvar web_1 = require(\"../utils/web\");\nvar errors = __importStar(require(\"../utils/errors\"));\n// The transaction has already been sanitized by the calls in Provider\nfunction getTransactionString(transaction) {\n var result = [];\n for (var key in transaction) {\n if (transaction[key] == null) {\n continue;\n }\n var value = convert_1.hexlify(transaction[key]);\n if ({ gasLimit: true, gasPrice: true, nonce: true, value: true }[key]) {\n value = convert_1.hexStripZeros(value);\n }\n result.push(key + '=' + value);\n }\n return result.join('&');\n}\nfunction getResult(result) {\n // getLogs, getHistory have weird success responses\n if (result.status == 0 && (result.message === 'No records found' || result.message === 'No transactions found')) {\n return result.result;\n }\n if (result.status != 1 || result.message != 'OK') {\n // @TODO: not any\n var error = new Error('invalid response');\n error.result = JSON.stringify(result);\n throw error;\n }\n return result.result;\n}\nfunction getJsonResult(result) {\n if (result.jsonrpc != '2.0') {\n // @TODO: not any\n var error = new Error('invalid response');\n error.result = JSON.stringify(result);\n throw error;\n }\n if (result.error) {\n // @TODO: not any\n var error = new Error(result.error.message || 'unknown error');\n if (result.error.code) {\n error.code = result.error.code;\n }\n if (result.error.data) {\n error.data = result.error.data;\n }\n throw error;\n }\n return result.result;\n}\n// The blockTag was normalized as a string by the Provider pre-perform operations\nfunction checkLogTag(blockTag) {\n if (blockTag === 'pending') {\n throw new Error('pending not supported');\n }\n if (blockTag === 'latest') {\n return blockTag;\n }\n return parseInt(blockTag.substring(2), 16);\n}\nvar EtherscanProvider = /** @class */ (function (_super) {\n __extends(EtherscanProvider, _super);\n function EtherscanProvider(network, apiKey) {\n var _this = _super.call(this, network || 'homestead') || this;\n errors.checkNew(_this, EtherscanProvider);\n var name = 'invalid';\n if (_this.network) {\n name = _this.network.name;\n }\n var baseUrl = null;\n switch (name) {\n case 'homestead':\n baseUrl = 'https://api.etherscan.io';\n break;\n case 'ropsten':\n baseUrl = 'https://api-ropsten.etherscan.io';\n break;\n case 'rinkeby':\n baseUrl = 'https://api-rinkeby.etherscan.io';\n break;\n case 'kovan':\n baseUrl = 'https://api-kovan.etherscan.io';\n break;\n default:\n throw new Error('unsupported network');\n }\n _this.baseUrl = baseUrl;\n _this.apiKey = apiKey;\n return _this;\n }\n EtherscanProvider.prototype.perform = function (method, params) {\n //if (!params) { params = {}; }\n var url = this.baseUrl;\n var apiKey = '';\n if (this.apiKey) {\n apiKey += '&apikey=' + this.apiKey;\n }\n switch (method) {\n case 'getBlockNumber':\n url += '/api?module=proxy&action=eth_blockNumber' + apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'getGasPrice':\n url += '/api?module=proxy&action=eth_gasPrice' + apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'getBalance':\n // Returns base-10 result\n url += '/api?module=account&action=balance&address=' + params.address;\n url += '&tag=' + params.blockTag + apiKey;\n return web_1.fetchJson(url, null, getResult);\n case 'getTransactionCount':\n url += '/api?module=proxy&action=eth_getTransactionCount&address=' + params.address;\n url += '&tag=' + params.blockTag + apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'getCode':\n url += '/api?module=proxy&action=eth_getCode&address=' + params.address;\n url += '&tag=' + params.blockTag + apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'getStorageAt':\n url += '/api?module=proxy&action=eth_getStorageAt&address=' + params.address;\n url += '&position=' + params.position;\n url += '&tag=' + params.blockTag + apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'sendTransaction':\n url += '/api?module=proxy&action=eth_sendRawTransaction&hex=' + params.signedTransaction;\n url += apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'getBlock':\n if (params.blockTag) {\n url += '/api?module=proxy&action=eth_getBlockByNumber&tag=' + params.blockTag;\n url += '&boolean=false';\n url += apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n }\n throw new Error('getBlock by blockHash not implmeneted');\n case 'getTransaction':\n url += '/api?module=proxy&action=eth_getTransactionByHash&txhash=' + params.transactionHash;\n url += apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'getTransactionReceipt':\n url += '/api?module=proxy&action=eth_getTransactionReceipt&txhash=' + params.transactionHash;\n url += apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'call':\n var transaction = getTransactionString(params.transaction);\n if (transaction) {\n transaction = '&' + transaction;\n }\n url += '/api?module=proxy&action=eth_call' + transaction;\n url += apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'estimateGas':\n var transaction = getTransactionString(params.transaction);\n if (transaction) {\n transaction = '&' + transaction;\n }\n url += '/api?module=proxy&action=eth_estimateGas&' + transaction;\n url += apiKey;\n return web_1.fetchJson(url, null, getJsonResult);\n case 'getLogs':\n url += '/api?module=logs&action=getLogs';\n try {\n if (params.filter.fromBlock) {\n url += '&fromBlock=' + checkLogTag(params.filter.fromBlock);\n }\n if (params.filter.toBlock) {\n url += '&toBlock=' + checkLogTag(params.filter.toBlock);\n }\n if (params.filter.address) {\n url += '&address=' + params.filter.address;\n }\n // @TODO: We can handle slightly more complicated logs using the logs API\n if (params.filter.topics && params.filter.topics.length > 0) {\n if (params.filter.topics.length > 1) {\n throw new Error('unsupported topic format');\n }\n var topic0 = params.filter.topics[0];\n if (typeof (topic0) !== 'string' || topic0.length !== 66) {\n throw new Error('unsupported topic0 format');\n }\n url += '&topic0=' + topic0;\n }\n }\n catch (error) {\n return Promise.reject(error);\n }\n url += apiKey;\n var self = this;\n return web_1.fetchJson(url, null, getResult).then(function (logs) {\n var txs = {};\n var seq = Promise.resolve();\n logs.forEach(function (log) {\n seq = seq.then(function () {\n if (log.blockHash != null) {\n return null;\n }\n log.blockHash = txs[log.transactionHash];\n if (log.blockHash == null) {\n return self.getTransaction(log.transactionHash).then(function (tx) {\n txs[log.transactionHash] = tx.blockHash;\n log.blockHash = tx.blockHash;\n });\n }\n return null;\n });\n });\n return seq.then(function () {\n return logs;\n });\n });\n case 'getEtherPrice':\n if (this.network.name !== 'homestead') {\n return Promise.resolve(0.0);\n }\n url += '/api?module=stats&action=ethprice';\n url += apiKey;\n return web_1.fetchJson(url, null, getResult).then(function (result) {\n return parseFloat(result.ethusd);\n });\n default:\n break;\n }\n return _super.prototype.perform.call(this, method, params);\n };\n EtherscanProvider.prototype.getHistory = function (addressOrName, startBlock, endBlock) {\n var url = this.baseUrl;\n var apiKey = '';\n if (this.apiKey) {\n apiKey += '&apikey=' + this.apiKey;\n }\n if (startBlock == null) {\n startBlock = 0;\n }\n if (endBlock == null) {\n endBlock = 99999999;\n }\n return this.resolveName(addressOrName).then(function (address) {\n url += '/api?module=account&action=txlist&address=' + address;\n url += '&startblock=' + startBlock;\n url += '&endblock=' + endBlock;\n url += '&sort=asc' + apiKey;\n return web_1.fetchJson(url, null, getResult).then(function (result) {\n var output = [];\n result.forEach(function (tx) {\n ['contractAddress', 'to'].forEach(function (key) {\n if (tx[key] == '') {\n delete tx[key];\n }\n });\n if (tx.creates == null && tx.contractAddress != null) {\n tx.creates = tx.contractAddress;\n }\n var item = provider_1.checkTransactionResponse(tx);\n if (tx.timeStamp) {\n item.timestamp = parseInt(tx.timeStamp);\n }\n output.push(item);\n });\n return output;\n });\n });\n };\n return EtherscanProvider;\n}(provider_1.Provider));\nexports.EtherscanProvider = EtherscanProvider;\n\n},{\"../utils/convert\":56,\"../utils/errors\":57,\"../utils/web\":71,\"./provider\":51}],46:[function(require,module,exports){\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar provider_1 = require(\"./provider\");\nvar errors = __importStar(require(\"../utils/errors\"));\n// Returns:\n// - true is all networks match\n// - false if any network is null\n// - throws if any 2 networks do not match\nfunction checkNetworks(networks) {\n var result = true;\n var check = null;\n networks.forEach(function (network) {\n // Null\n if (network == null) {\n result = false;\n return;\n }\n // Have nothing to compre to yet\n if (check == null) {\n check = network;\n return;\n }\n // Matches!\n if (check.name === network.name &&\n check.chainId === network.chainId &&\n check.ensAddress === network.ensAddress) {\n return;\n }\n errors.throwError('provider mismatch', errors.INVALID_ARGUMENT, { arg: 'providers', networks: networks });\n });\n return result;\n}\nvar FallbackProvider = /** @class */ (function (_super) {\n __extends(FallbackProvider, _super);\n function FallbackProvider(providers) {\n var _this = this;\n if (providers.length === 0) {\n throw new Error('no providers');\n }\n var ready = checkNetworks(providers.map(function (p) { return p.network; }));\n if (ready) {\n _this = _super.call(this, providers[0].network) || this;\n errors.checkNew(_this, FallbackProvider);\n }\n else {\n _this = _super.call(this, null) || this;\n errors.checkNew(_this, FallbackProvider);\n // We re-assign the ready function to make sure all networks actually match\n _this.ready = Promise.all(providers.map(function (p) { return p.getNetwork(); })).then(function (networks) {\n if (!checkNetworks(networks)) {\n errors.throwError('getNetwork returned null', errors.UNKNOWN_ERROR, {});\n }\n return networks[0];\n });\n }\n _this._providers = providers.slice(0);\n return _this;\n }\n Object.defineProperty(FallbackProvider.prototype, \"providers\", {\n get: function () {\n return this._providers.slice(0);\n },\n enumerable: true,\n configurable: true\n });\n FallbackProvider.prototype.perform = function (method, params) {\n // Creates a copy of the providers array\n var providers = this.providers;\n return new Promise(function (resolve, reject) {\n var firstError = null;\n function next() {\n if (!providers.length) {\n reject(firstError);\n return;\n }\n var provider = providers.shift();\n provider.perform(method, params).then(function (result) {\n resolve(result);\n }, function (error) {\n if (!firstError) {\n firstError = error;\n }\n next();\n });\n }\n next();\n });\n };\n return FallbackProvider;\n}(provider_1.Provider));\nexports.FallbackProvider = FallbackProvider;\n\n},{\"../utils/errors\":57,\"./provider\":51}],47:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar provider_1 = require(\"./provider\");\nexports.Provider = provider_1.Provider;\nvar etherscan_provider_1 = require(\"./etherscan-provider\");\nexports.EtherscanProvider = etherscan_provider_1.EtherscanProvider;\nvar fallback_provider_1 = require(\"./fallback-provider\");\nexports.FallbackProvider = fallback_provider_1.FallbackProvider;\n//import { IpcProvider } from './ipc-provider';\nvar infura_provider_1 = require(\"./infura-provider\");\nexports.InfuraProvider = infura_provider_1.InfuraProvider;\nvar json_rpc_provider_1 = require(\"./json-rpc-provider\");\nexports.JsonRpcProvider = json_rpc_provider_1.JsonRpcProvider;\nvar web3_provider_1 = require(\"./web3-provider\");\nexports.Web3Provider = web3_provider_1.Web3Provider;\nfunction getDefaultProvider(network) {\n return new fallback_provider_1.FallbackProvider([\n new infura_provider_1.InfuraProvider(network),\n new etherscan_provider_1.EtherscanProvider(network),\n ]);\n}\nexports.getDefaultProvider = getDefaultProvider;\n\n},{\"./etherscan-provider\":45,\"./fallback-provider\":46,\"./infura-provider\":48,\"./json-rpc-provider\":49,\"./provider\":51,\"./web3-provider\":52}],48:[function(require,module,exports){\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar json_rpc_provider_1 = require(\"./json-rpc-provider\");\nvar networks_1 = require(\"./networks\");\nvar errors = __importStar(require(\"../utils/errors\"));\nvar InfuraProvider = /** @class */ (function (_super) {\n __extends(InfuraProvider, _super);\n function InfuraProvider(network, apiAccessToken) {\n var _this = this;\n network = networks_1.getNetwork(network || 'homestead');\n var host = null;\n switch (network.name) {\n case 'homestead':\n host = 'mainnet.infura.io';\n break;\n case 'ropsten':\n host = 'ropsten.infura.io';\n break;\n case 'rinkeby':\n host = 'rinkeby.infura.io';\n break;\n case 'kovan':\n host = 'kovan.infura.io';\n break;\n default:\n throw new Error('unsupported network');\n }\n _this = _super.call(this, 'https://' + host + '/' + (apiAccessToken || ''), network) || this;\n errors.checkNew(_this, InfuraProvider);\n _this.apiAccessToken = (apiAccessToken || null);\n return _this;\n }\n InfuraProvider.prototype._startPending = function () {\n console.log('WARNING: INFURA does not support pending filters');\n };\n InfuraProvider.prototype.getSigner = function (address) {\n errors.throwError('INFURA does not support signing', errors.UNSUPPORTED_OPERATION, { operation: 'getSigner' });\n return null;\n };\n InfuraProvider.prototype.listAccounts = function () {\n return Promise.resolve([]);\n };\n return InfuraProvider;\n}(json_rpc_provider_1.JsonRpcProvider));\nexports.InfuraProvider = InfuraProvider;\n\n},{\"../utils/errors\":57,\"./json-rpc-provider\":49,\"./networks\":50}],49:[function(require,module,exports){\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// See: https://github.com/ethereum/wiki/wiki/JSON-RPC\nvar networks_1 = require(\"./networks\");\nvar provider_1 = require(\"./provider\");\nvar address_1 = require(\"../utils/address\");\nvar convert_1 = require(\"../utils/convert\");\nvar utf8_1 = require(\"../utils/utf8\");\nvar web_1 = require(\"../utils/web\");\nvar errors = __importStar(require(\"../utils/errors\"));\nfunction timer(timeout) {\n return new Promise(function (resolve) {\n setTimeout(function () {\n resolve();\n }, timeout);\n });\n}\nfunction getResult(payload) {\n if (payload.error) {\n // @TODO: not any\n var error = new Error(payload.error.message);\n error.code = payload.error.code;\n error.data = payload.error.data;\n throw error;\n }\n return payload.result;\n}\n// Convert an ethers.js transaction into a JSON-RPC transaction\n// - gasLimit => gas\n// - All values hexlified\n// - All numeric values zero-striped\nfunction hexlifyTransaction(transaction) {\n var result = {};\n // Some nodes (INFURA ropsten; INFURA mainnet is fine) don't like extra zeros.\n ['gasLimit', 'gasPrice', 'nonce', 'value'].forEach(function (key) {\n if (transaction[key] == null) {\n return;\n }\n var value = convert_1.hexStripZeros(convert_1.hexlify(transaction[key]));\n if (key === 'gasLimit') {\n key = 'gas';\n }\n result[key] = value;\n });\n ['from', 'to', 'data'].forEach(function (key) {\n if (transaction[key] == null) {\n return;\n }\n result[key] = convert_1.hexlify(transaction[key]);\n });\n return result;\n}\nexports.hexlifyTransaction = hexlifyTransaction;\nfunction getLowerCase(value) {\n if (value) {\n return value.toLowerCase();\n }\n return value;\n}\nvar JsonRpcSigner = /** @class */ (function () {\n // private _syncAddress: boolean;\n function JsonRpcSigner(provider, address) {\n errors.checkNew(this, JsonRpcSigner);\n this.provider = provider;\n // Statically attach to a given address\n if (address) {\n this._address = address;\n //this._syncAddress = true;\n }\n }\n Object.defineProperty(JsonRpcSigner.prototype, \"address\", {\n get: function () {\n if (!this._address) {\n errors.throwError('no sync sync address available; use getAddress', errors.UNSUPPORTED_OPERATION, { operation: 'address' });\n }\n return this._address;\n },\n enumerable: true,\n configurable: true\n });\n JsonRpcSigner.prototype.getAddress = function () {\n if (this._address) {\n return Promise.resolve(this._address);\n }\n return this.provider.send('eth_accounts', []).then(function (accounts) {\n if (accounts.length === 0) {\n errors.throwError('no accounts', errors.UNSUPPORTED_OPERATION, { operation: 'getAddress' });\n }\n return address_1.getAddress(accounts[0]);\n });\n };\n JsonRpcSigner.prototype.getBalance = function (blockTag) {\n var _this = this;\n return this.getAddress().then(function (address) {\n return _this.provider.getBalance(address, blockTag);\n });\n };\n JsonRpcSigner.prototype.getTransactionCount = function (blockTag) {\n var _this = this;\n return this.getAddress().then(function (address) {\n return _this.provider.getTransactionCount(address, blockTag);\n });\n };\n // @TODO:\n //sendTransaction(transaction: TransactionRequest): Promise<TransactionResponse> {\n JsonRpcSigner.prototype.sendTransaction = function (transaction) {\n var _this = this;\n transaction = hexlifyTransaction(transaction);\n return this.getAddress().then(function (address) {\n transaction.from = address.toLowerCase();\n return _this.provider.send('eth_sendTransaction', [transaction]).then(function (hash) {\n // @TODO: Use secp256k1 to fill this in instead...\n return new Promise(function (resolve, reject) {\n function check() {\n this.provider.getTransaction(hash).then(function (transaction) {\n if (!transaction) {\n setTimeout(check, 1000);\n return;\n }\n transaction.wait = function (timeout) {\n return this.provider.waitForTransaction(hash, timeout);\n };\n resolve(transaction);\n });\n }\n check();\n });\n });\n });\n };\n JsonRpcSigner.prototype.signMessage = function (message) {\n var _this = this;\n var data = ((typeof (message) === 'string') ? utf8_1.toUtf8Bytes(message) : message);\n return this.getAddress().then(function (address) {\n // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n return _this.provider.send('eth_sign', [address.toLowerCase(), convert_1.hexlify(data)]);\n });\n };\n JsonRpcSigner.prototype.unlock = function (password) {\n var provider = this.provider;\n return this.getAddress().then(function (address) {\n return provider.send('personal_unlockAccount', [address.toLowerCase(), password, null]);\n });\n };\n return JsonRpcSigner;\n}());\nexports.JsonRpcSigner = JsonRpcSigner;\nvar JsonRpcProvider = /** @class */ (function (_super) {\n __extends(JsonRpcProvider, _super);\n function JsonRpcProvider(url, network) {\n var _this = this;\n // One parameter, but it is a network name, so swap it with the URL\n if (typeof (url) === 'string') {\n if (network === null && networks_1.getNetwork(url)) {\n network = url;\n url = null;\n }\n }\n _this = _super.call(this, network) || this;\n errors.checkNew(_this, JsonRpcProvider);\n // Default URL\n if (!url) {\n url = 'http://localhost:8545';\n }\n if (typeof (url) === 'string') {\n _this.connection = {\n url: url\n };\n }\n else {\n _this.connection = url;\n }\n // The network is unknown, query the JSON-RPC for it\n if (!_this.network) {\n _this.ready = new Promise(function (resolve, reject) {\n setTimeout(function () {\n _this.send('net_version', []).then(function (result) {\n var chainId = parseInt(result);\n var network = networks_1.getNetwork(chainId);\n if (network) {\n return resolve(network);\n }\n resolve({\n name: 'custom',\n chainId: chainId\n });\n });\n });\n });\n }\n return _this;\n }\n JsonRpcProvider.prototype.getSigner = function (address) {\n return new JsonRpcSigner(this, address);\n };\n JsonRpcProvider.prototype.listAccounts = function () {\n return this.send('eth_accounts', []).then(function (accounts) {\n return accounts.map(function (a) { return address_1.getAddress(a); });\n });\n };\n JsonRpcProvider.prototype.send = function (method, params) {\n var request = {\n method: method,\n params: params,\n id: 42,\n jsonrpc: \"2.0\"\n };\n return web_1.fetchJson(this.connection, JSON.stringify(request), getResult);\n };\n JsonRpcProvider.prototype.perform = function (method, params) {\n switch (method) {\n case 'getBlockNumber':\n return this.send('eth_blockNumber', []);\n case 'getGasPrice':\n return this.send('eth_gasPrice', []);\n case 'getBalance':\n return this.send('eth_getBalance', [getLowerCase(params.address), params.blockTag]);\n case 'getTransactionCount':\n return this.send('eth_getTransactionCount', [getLowerCase(params.address), params.blockTag]);\n case 'getCode':\n return this.send('eth_getCode', [getLowerCase(params.address), params.blockTag]);\n case 'getStorageAt':\n return this.send('eth_getStorageAt', [getLowerCase(params.address), params.position, params.blockTag]);\n case 'sendTransaction':\n return this.send('eth_sendRawTransaction', [params.signedTransaction]);\n case 'getBlock':\n if (params.blockTag) {\n return this.send('eth_getBlockByNumber', [params.blockTag, false]);\n }\n else if (params.blockHash) {\n return this.send('eth_getBlockByHash', [params.blockHash, false]);\n }\n return Promise.reject(new Error('invalid block tag or block hash'));\n case 'getTransaction':\n return this.send('eth_getTransactionByHash', [params.transactionHash]);\n case 'getTransactionReceipt':\n return this.send('eth_getTransactionReceipt', [params.transactionHash]);\n case 'call':\n return this.send('eth_call', [hexlifyTransaction(params.transaction), 'latest']);\n case 'estimateGas':\n return this.send('eth_estimateGas', [hexlifyTransaction(params.transaction)]);\n case 'getLogs':\n if (params.filter && params.filter.address != null) {\n params.filter.address = getLowerCase(params.filter.address);\n }\n return this.send('eth_getLogs', [params.filter]);\n default:\n break;\n }\n errors.throwError(method + ' not implemented', errors.NOT_IMPLEMENTED, { operation: method });\n return null;\n };\n JsonRpcProvider.prototype._startPending = function () {\n if (this._pendingFilter != null) {\n return;\n }\n var self = this;\n var pendingFilter = this.send('eth_newPendingTransactionFilter', []);\n this._pendingFilter = pendingFilter;\n pendingFilter.then(function (filterId) {\n function poll() {\n self.send('eth_getFilterChanges', [filterId]).then(function (hashes) {\n if (self._pendingFilter != pendingFilter) {\n return null;\n }\n var seq = Promise.resolve();\n hashes.forEach(function (hash) {\n self._emitted['t:' + hash.toLowerCase()] = 'pending';\n seq = seq.then(function () {\n return self.getTransaction(hash).then(function (tx) {\n self.emit('pending', tx);\n });\n });\n });\n return seq.then(function () {\n return timer(1000);\n });\n }).then(function () {\n if (self._pendingFilter != pendingFilter) {\n self.send('eth_uninstallFilter', [filterId]);\n return;\n }\n setTimeout(function () { poll(); }, 0);\n });\n }\n poll();\n return filterId;\n });\n };\n JsonRpcProvider.prototype._stopPending = function () {\n this._pendingFilter = null;\n };\n return JsonRpcProvider;\n}(provider_1.Provider));\nexports.JsonRpcProvider = JsonRpcProvider;\n\n},{\"../utils/address\":54,\"../utils/convert\":56,\"../utils/errors\":57,\"../utils/utf8\":70,\"../utils/web\":71,\"./networks\":50,\"./provider\":51}],50:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar errors = __importStar(require(\"../utils/errors\"));\n// @TODO: Make these all read-only with defineProperty\nexports.networks = {\n \"unspecified\": {\n \"chainId\": 0,\n \"name\": \"unspecified\"\n },\n \"homestead\": {\n \"chainId\": 1,\n \"ensAddress\": \"0x314159265dd8dbb310642f98f50c066173c1259b\",\n \"name\": \"homestead\"\n },\n \"mainnet\": {\n \"chainId\": 1,\n \"ensAddress\": \"0x314159265dd8dbb310642f98f50c066173c1259b\",\n \"name\": \"homestead\"\n },\n \"morden\": {\n \"chainId\": 2,\n \"name\": \"morden\"\n },\n \"ropsten\": {\n \"chainId\": 3,\n \"ensAddress\": \"0x112234455c3a32fd11230c42e7bccd4a84e02010\",\n \"name\": \"ropsten\"\n },\n \"testnet\": {\n \"chainId\": 3,\n \"ensAddress\": \"0x112234455c3a32fd11230c42e7bccd4a84e02010\",\n \"name\": \"ropsten\"\n },\n \"rinkeby\": {\n \"chainId\": 4,\n \"name\": \"rinkeby\"\n },\n \"kovan\": {\n \"chainId\": 42,\n \"name\": \"kovan\"\n },\n \"classic\": {\n \"chainId\": 61,\n \"name\": \"classic\"\n }\n};\n/**\n * getNetwork\n *\n * If the network is a the name of a common network, return that network.\n * Otherwise, if it is a network object, verify the chain ID is valid\n * for that network. Otherwise, return the network.\n *\n */\nfunction getNetwork(network) {\n // No network (null) or unspecified (chainId = 0)\n if (!network) {\n return null;\n }\n if (typeof (network) === 'number') {\n for (var key in exports.networks) {\n var n = exports.networks[key];\n if (n.chainId === network) {\n return n;\n }\n }\n return null;\n }\n if (typeof (network) === 'string') {\n return exports.networks[network] || null;\n }\n var networkObj = exports.networks[network.name];\n // Not a standard network; check that it is a valid network in general\n if (!networkObj) {\n if (typeof (network.chainId) !== 'number') {\n errors.throwError('invalid network chainId', errors.INVALID_ARGUMENT, { name: 'network', value: network });\n }\n return network;\n }\n // Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155)\n if (network.chainId != 0 && network.chainId !== networkObj.chainId) {\n errors.throwError('network chainId mismatch', errors.INVALID_ARGUMENT, { name: 'network', value: network });\n }\n return networkObj;\n}\nexports.getNetwork = getNetwork;\n\n},{\"../utils/errors\":57}],51:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//import inherits = require('inherits');\nvar address_1 = require(\"../utils/address\");\nvar bignumber_1 = require(\"../utils/bignumber\");\nvar convert_1 = require(\"../utils/convert\");\nvar utf8_1 = require(\"../utils/utf8\");\nvar rlp_1 = require(\"../utils/rlp\");\nvar namehash_1 = require(\"../utils/namehash\");\nvar networks_1 = require(\"./networks\");\nvar properties_1 = require(\"../utils/properties\");\nvar errors = __importStar(require(\"../utils/errors\"));\nfunction copyObject(obj) {\n var result = {};\n for (var key in obj) {\n result[key] = obj[key];\n }\n return result;\n}\n//////////////////////////////\n// Request and Response Checking\n// @TODO: not any?\nfunction check(format, object) {\n var result = {};\n for (var key in format) {\n try {\n var value = format[key](object[key]);\n if (value !== undefined) {\n result[key] = value;\n }\n }\n catch (error) {\n error.checkKey = key;\n error.checkValue = object[key];\n throw error;\n }\n }\n return result;\n}\nfunction allowNull(check, nullValue) {\n return (function (value) {\n if (value == null) {\n return nullValue;\n }\n return check(value);\n });\n}\nfunction allowFalsish(check, replaceValue) {\n return (function (value) {\n if (!value) {\n return replaceValue;\n }\n return check(value);\n });\n}\nfunction arrayOf(check) {\n return (function (array) {\n if (!Array.isArray(array)) {\n throw new Error('not an array');\n }\n var result = [];\n array.forEach(function (value) {\n result.push(check(value));\n });\n return result;\n });\n}\nfunction checkHash(hash) {\n if (typeof (hash) === 'string' && convert_1.isHexString(hash, 32)) {\n return hash;\n }\n errors.throwError('invalid hash', errors.INVALID_ARGUMENT, { arg: 'hash', value: hash });\n return null;\n}\nfunction checkNumber(number) {\n return bignumber_1.bigNumberify(number).toNumber();\n}\n// Returns the difficulty as a number, or if too large (i.e. PoA network) null\nfunction checkDifficulty(value) {\n var v = bignumber_1.bigNumberify(value);\n try {\n return v.toNumber();\n }\n catch (error) { }\n return null;\n}\nfunction checkBoolean(value) {\n if (typeof (value) === 'boolean') {\n return value;\n }\n if (typeof (value) === 'string') {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n }\n throw new Error('invaid boolean - ' + value);\n}\nfunction checkUint256(uint256) {\n if (!convert_1.isHexString(uint256)) {\n throw new Error('invalid uint256');\n }\n while (uint256.length < 66) {\n uint256 = '0x0' + uint256.substring(2);\n }\n return uint256;\n}\n/*\nfunction checkString(string) {\n if (typeof(string) !== 'string') { throw new Error('invalid string'); }\n return string;\n}\n*/\nfunction checkBlockTag(blockTag) {\n if (blockTag == null) {\n return 'latest';\n }\n if (blockTag === 'earliest') {\n return '0x0';\n }\n if (blockTag === 'latest' || blockTag === 'pending') {\n return blockTag;\n }\n if (typeof (blockTag) === 'number') {\n return convert_1.hexStripZeros(convert_1.hexlify(blockTag));\n }\n if (convert_1.isHexString(blockTag)) {\n return convert_1.hexStripZeros(blockTag);\n }\n throw new Error('invalid blockTag');\n}\nvar formatBlock = {\n hash: checkHash,\n parentHash: checkHash,\n number: checkNumber,\n timestamp: checkNumber,\n nonce: allowNull(convert_1.hexlify),\n difficulty: checkDifficulty,\n gasLimit: bignumber_1.bigNumberify,\n gasUsed: bignumber_1.bigNumberify,\n miner: address_1.getAddress,\n extraData: convert_1.hexlify,\n //transactions: allowNull(arrayOf(checkTransaction)),\n transactions: allowNull(arrayOf(checkHash)),\n};\nfunction checkBlock(block) {\n if (block.author != null && block.miner == null) {\n block.miner = block.author;\n }\n return check(formatBlock, block);\n}\nvar formatTransaction = {\n hash: checkHash,\n blockHash: allowNull(checkHash, null),\n blockNumber: allowNull(checkNumber, null),\n transactionIndex: allowNull(checkNumber, null),\n from: address_1.getAddress,\n gasPrice: bignumber_1.bigNumberify,\n gasLimit: bignumber_1.bigNumberify,\n to: allowNull(address_1.getAddress, null),\n value: bignumber_1.bigNumberify,\n nonce: checkNumber,\n data: convert_1.hexlify,\n r: allowNull(checkUint256),\n s: allowNull(checkUint256),\n v: allowNull(checkNumber),\n creates: allowNull(address_1.getAddress, null),\n raw: allowNull(convert_1.hexlify),\n};\nfunction checkTransactionResponse(transaction) {\n // Rename gas to gasLimit\n if (transaction.gas != null && transaction.gasLimit == null) {\n transaction.gasLimit = transaction.gas;\n }\n // Some clients (TestRPC) do strange things like return 0x0 for the\n // 0 address; correct this to be a real address\n if (transaction.to && bignumber_1.bigNumberify(transaction.to).isZero()) {\n transaction.to = '0x0000000000000000000000000000000000000000';\n }\n // Rename input to data\n if (transaction.input != null && transaction.data == null) {\n transaction.data = transaction.input;\n }\n // If to and creates are empty, populate the creates from the transaction\n if (transaction.to == null && transaction.creates == null) {\n transaction.creates = address_1.getContractAddress(transaction);\n }\n if (!transaction.raw) {\n // Very loose providers (e.g. TestRPC) don't provide a signature or raw\n if (transaction.v && transaction.r && transaction.s) {\n var raw = [\n convert_1.stripZeros(convert_1.hexlify(transaction.nonce)),\n convert_1.stripZeros(convert_1.hexlify(transaction.gasPrice)),\n convert_1.stripZeros(convert_1.hexlify(transaction.gasLimit)),\n (transaction.to || \"0x\"),\n convert_1.stripZeros(convert_1.hexlify(transaction.value || '0x')),\n convert_1.hexlify(transaction.data || '0x'),\n convert_1.stripZeros(convert_1.hexlify(transaction.v || '0x')),\n convert_1.stripZeros(convert_1.hexlify(transaction.r)),\n convert_1.stripZeros(convert_1.hexlify(transaction.s)),\n ];\n transaction.raw = rlp_1.encode(raw);\n }\n }\n var result = check(formatTransaction, transaction);\n var networkId = transaction.networkId;\n if (convert_1.isHexString(networkId)) {\n networkId = bignumber_1.bigNumberify(networkId).toNumber();\n }\n if (typeof (networkId) !== 'number' && result.v != null) {\n networkId = (result.v - 35) / 2;\n if (networkId < 0) {\n networkId = 0;\n }\n networkId = parseInt(networkId);\n }\n if (typeof (networkId) !== 'number') {\n networkId = 0;\n }\n result.networkId = networkId;\n // 0x0000... should actually be null\n if (result.blockHash && result.blockHash.replace(/0/g, '') === 'x') {\n result.blockHash = null;\n }\n return result;\n}\nexports.checkTransactionResponse = checkTransactionResponse;\nvar formatTransactionRequest = {\n from: allowNull(address_1.getAddress),\n nonce: allowNull(checkNumber),\n gasLimit: allowNull(bignumber_1.bigNumberify),\n gasPrice: allowNull(bignumber_1.bigNumberify),\n to: allowNull(address_1.getAddress),\n value: allowNull(bignumber_1.bigNumberify),\n data: allowNull(convert_1.hexlify),\n};\nfunction checkTransactionRequest(transaction) {\n return check(formatTransactionRequest, transaction);\n}\nvar formatTransactionReceiptLog = {\n transactionLogIndex: allowNull(checkNumber),\n transactionIndex: checkNumber,\n blockNumber: checkNumber,\n transactionHash: checkHash,\n address: address_1.getAddress,\n topics: arrayOf(checkHash),\n data: convert_1.hexlify,\n logIndex: checkNumber,\n blockHash: checkHash,\n};\nfunction checkTransactionReceiptLog(log) {\n return check(formatTransactionReceiptLog, log);\n}\nvar formatTransactionReceipt = {\n contractAddress: allowNull(address_1.getAddress, null),\n transactionIndex: checkNumber,\n root: allowNull(checkHash),\n gasUsed: bignumber_1.bigNumberify,\n logsBloom: allowNull(convert_1.hexlify),\n blockHash: checkHash,\n transactionHash: checkHash,\n logs: arrayOf(checkTransactionReceiptLog),\n blockNumber: checkNumber,\n cumulativeGasUsed: bignumber_1.bigNumberify,\n status: allowNull(checkNumber)\n};\nfunction checkTransactionReceipt(transactionReceipt) {\n //var status = transactionReceipt.status;\n //var root = transactionReceipt.root;\n var result = check(formatTransactionReceipt, transactionReceipt);\n result.logs.forEach(function (entry, index) {\n if (entry.transactionLogIndex == null) {\n entry.transactionLogIndex = index;\n }\n });\n if (transactionReceipt.status != null) {\n result.byzantium = true;\n }\n return result;\n}\nfunction checkTopics(topics) {\n if (Array.isArray(topics)) {\n topics.forEach(function (topic) {\n checkTopics(topic);\n });\n }\n else if (topics != null) {\n checkHash(topics);\n }\n return topics;\n}\nvar formatFilter = {\n fromBlock: allowNull(checkBlockTag, undefined),\n toBlock: allowNull(checkBlockTag, undefined),\n address: allowNull(address_1.getAddress, undefined),\n topics: allowNull(checkTopics, undefined),\n};\nfunction checkFilter(filter) {\n return check(formatFilter, filter);\n}\nvar formatLog = {\n blockNumber: allowNull(checkNumber),\n blockHash: allowNull(checkHash),\n transactionIndex: checkNumber,\n removed: allowNull(checkBoolean),\n address: address_1.getAddress,\n data: allowFalsish(convert_1.hexlify, '0x'),\n topics: arrayOf(checkHash),\n transactionHash: checkHash,\n logIndex: checkNumber,\n};\nfunction checkLog(log) {\n return check(formatLog, log);\n}\nfunction stallPromise(allowNullFunc, executeFunc) {\n return new Promise(function (resolve, reject) {\n var attempt = 0;\n function check() {\n executeFunc().then(function (result) {\n // If we have a result, or are allowed null then we're done\n if (result || allowNullFunc()) {\n resolve(result);\n // Otherwise, exponential back-off (up to 10s) our next request\n }\n else {\n attempt++;\n var timeout = 500 + 250 * Math.trunc(Math.random() * (1 << attempt));\n if (timeout > 10000) {\n timeout = 10000;\n }\n setTimeout(check, timeout);\n }\n }, function (error) {\n reject(error);\n });\n }\n check();\n });\n}\n//////////////////////////////\n// Event Serializeing\nfunction recurse(object, convertFunc) {\n if (Array.isArray(object)) {\n var result = [];\n object.forEach(function (object) {\n result.push(recurse(object, convertFunc));\n });\n return result;\n }\n return convertFunc(object);\n}\nfunction getEventString(object) {\n try {\n return 'address:' + address_1.getAddress(object);\n }\n catch (error) { }\n if (object === 'block') {\n return 'block';\n }\n else if (object === 'pending') {\n return 'pending';\n }\n else if (convert_1.isHexString(object)) {\n if (object.length === 66) {\n return 'tx:' + object;\n }\n }\n else if (Array.isArray(object)) {\n object = recurse(object, function (object) {\n if (object == null) {\n object = '0x';\n }\n return object;\n });\n try {\n return 'topic:' + rlp_1.encode(object);\n }\n catch (error) {\n console.log(error);\n }\n }\n throw new Error('invalid event - ' + object);\n}\nfunction parseEventString(string) {\n if (string.substring(0, 3) === 'tx:') {\n return { type: 'transaction', hash: string.substring(3) };\n }\n else if (string === 'block') {\n return { type: 'block' };\n }\n else if (string === 'pending') {\n return { type: 'pending' };\n }\n else if (string.substring(0, 8) === 'address:') {\n return { type: 'address', address: string.substring(8) };\n }\n else if (string.substring(0, 6) === 'topic:') {\n try {\n var object = rlp_1.decode(string.substring(6));\n object = recurse(object, function (object) {\n if (object === '0x') {\n object = null;\n }\n return object;\n });\n return { type: 'topic', topic: object };\n }\n catch (error) {\n console.log(error);\n }\n }\n throw new Error('invalid event string');\n}\n//////////////////////////////\n// Provider Object\n/* @TODO:\ntype Event = {\n eventName: string,\n listener: any, // @TODO: Function any: any\n type: string,\n}\n*/\nvar Provider = /** @class */ (function () {\n /**\n * Sub-classing notes\n * - If the network is standard or fully specified, ready will resolve\n * - Otherwise, the sub-class must assign a Promise to ready\n */\n function Provider(network) {\n errors.checkNew(this, Provider);\n network = networks_1.getNetwork(network);\n if (network) {\n this._network = network;\n // Sub-classes MAY re-assign a Promise if a standard network name is provided\n this.ready = Promise.resolve(this._network);\n }\n else {\n // Sub-classes MUST re-assign a Promise to \"ready\" that returns a Network\n this.ready = new Promise(function (resolve, reject) { });\n }\n this._lastBlockNumber = -2;\n // Balances being watched for changes\n this._balances = {};\n // Events being listened to\n this._events = {};\n this._pollingInterval = 4000;\n // We use this to track recent emitted events; for example, if we emit a \"block\" of 100\n // and we get a `getBlock(100)` request which would result in null, we should retry\n // until we get a response. This provides devs with a consistent view. Similarly for\n // transaction hashes.\n this._emitted = { block: this._lastBlockNumber };\n }\n Provider.prototype._doPoll = function () {\n var _this = this;\n this.getBlockNumber().then(function (blockNumber) {\n // If the block hasn't changed, meh.\n if (blockNumber === _this._lastBlockNumber) {\n return;\n }\n if (_this._lastBlockNumber === -2) {\n _this._lastBlockNumber = blockNumber - 1;\n }\n // Notify all listener for each block that has passed\n for (var i = _this._lastBlockNumber + 1; i <= blockNumber; i++) {\n if (_this._emitted.block < i) {\n _this._emitted.block = i;\n // Evict any transaction hashes or block hashes over 12 blocks\n // old, since they should not return null anyways\n Object.keys(_this._emitted).forEach(function (key) {\n if (key === 'block') {\n return;\n }\n if (_this._emitted[key] > i + 12) {\n delete _this._emitted[key];\n }\n });\n }\n _this.emit('block', i);\n }\n // Sweep balances and remove addresses we no longer have events for\n var newBalances = {};\n // Find all transaction hashes we are waiting on\n Object.keys(_this._events).forEach(function (eventName) {\n var event = parseEventString(eventName);\n if (event.type === 'transaction') {\n _this.getTransaction(event.hash).then(function (transaction) {\n if (!transaction || transaction.blockNumber == null) {\n return;\n }\n _this._emitted['t:' + transaction.hash.toLowerCase()] = transaction.blockNumber;\n _this.emit(event.hash, transaction);\n });\n }\n else if (event.type === 'address') {\n if (_this._balances[event.address]) {\n newBalances[event.address] = _this._balances[event.address];\n }\n _this.getBalance(event.address, 'latest').then(function (balance) {\n var lastBalance = this._balances[event.address];\n if (lastBalance && balance.eq(lastBalance)) {\n return;\n }\n this._balances[event.address] = balance;\n this.emit(event.address, balance);\n });\n }\n else if (event.type === 'topic') {\n _this.getLogs({\n fromBlock: _this._lastBlockNumber + 1,\n toBlock: blockNumber,\n topics: event.topic\n }).then(function (logs) {\n if (logs.length === 0) {\n return;\n }\n logs.forEach(function (log) {\n _this._emitted['b:' + log.blockHash.toLowerCase()] = log.blockNumber;\n _this._emitted['t:' + log.transactionHash.toLowerCase()] = log.blockNumber;\n _this.emit(event.topic, log);\n });\n });\n }\n });\n _this._lastBlockNumber = blockNumber;\n _this._balances = newBalances;\n });\n this.doPoll();\n };\n Provider.prototype.resetEventsBlock = function (blockNumber) {\n this._lastBlockNumber = this.blockNumber;\n this._doPoll();\n };\n Object.defineProperty(Provider.prototype, \"network\", {\n get: function () {\n return this._network;\n },\n enumerable: true,\n configurable: true\n });\n Provider.prototype.getNetwork = function () {\n return this.ready;\n };\n Object.defineProperty(Provider.prototype, \"blockNumber\", {\n get: function () {\n if (this._lastBlockNumber < 0) {\n return null;\n }\n return this._lastBlockNumber;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Provider.prototype, \"polling\", {\n get: function () {\n return (this._poller != null);\n },\n set: function (value) {\n var _this = this;\n setTimeout(function () {\n if (value && !_this._poller) {\n _this._poller = setInterval(_this._doPoll.bind(_this), _this.pollingInterval);\n }\n else if (!value && _this._poller) {\n clearInterval(_this._poller);\n _this._poller = null;\n }\n }, 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Provider.prototype, \"pollingInterval\", {\n get: function () {\n return this._pollingInterval;\n },\n set: function (value) {\n var _this = this;\n if (typeof (value) !== 'number' || value <= 0 || Math.trunc(value) != value) {\n throw new Error('invalid polling interval');\n }\n this._pollingInterval = value;\n if (this._poller) {\n clearInterval(this._poller);\n this._poller = setInterval(function () { _this._doPoll(); }, this._pollingInterval);\n }\n },\n enumerable: true,\n configurable: true\n });\n // @TODO: Add .poller which must be an event emitter with a 'start', 'stop' and 'block' event;\n // this will be used once we move to the WebSocket or other alternatives to polling\n Provider.prototype.waitForTransaction = function (transactionHash, timeout) {\n var self = this;\n return new Promise(function (resolve, reject) {\n var timer = null;\n function complete(transaction) {\n if (timer) {\n clearTimeout(timer);\n }\n resolve(transaction);\n }\n self.once(transactionHash, complete);\n if (typeof (timeout) === 'number' && timeout > 0) {\n timer = setTimeout(function () {\n self.removeListener(transactionHash, complete);\n reject(new Error('timeout'));\n }, timeout);\n }\n });\n };\n Provider.prototype.getBlockNumber = function () {\n var _this = this;\n return this.ready.then(function () {\n return _this.perform('getBlockNumber', {}).then(function (result) {\n var value = Math.trunc(result);\n if (value != result) {\n throw new Error('invalid response - getBlockNumber');\n }\n return value;\n });\n });\n };\n Provider.prototype.getGasPrice = function () {\n var _this = this;\n return this.ready.then(function () {\n return _this.perform('getGasPrice', {}).then(function (result) {\n return bignumber_1.bigNumberify(result);\n });\n });\n };\n Provider.prototype.getBalance = function (addressOrName, blockTag) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(function (_a) {\n var addressOrName = _a.addressOrName, blockTag = _a.blockTag;\n return _this.resolveName(addressOrName).then(function (address) {\n var params = { address: address, blockTag: checkBlockTag(blockTag) };\n return _this.perform('getBalance', params).then(function (result) {\n return bignumber_1.bigNumberify(result);\n });\n });\n });\n });\n };\n Provider.prototype.getTransactionCount = function (addressOrName, blockTag) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(function (_a) {\n var addressOrName = _a.addressOrName, blockTag = _a.blockTag;\n return _this.resolveName(addressOrName).then(function (address) {\n var params = { address: address, blockTag: checkBlockTag(blockTag) };\n return _this.perform('getTransactionCount', params).then(function (result) {\n var value = parseInt(result);\n if (value != result) {\n throw new Error('invalid response - getTransactionCount');\n }\n return value;\n });\n });\n });\n });\n };\n Provider.prototype.getCode = function (addressOrName, blockTag) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(function (_a) {\n var addressOrName = _a.addressOrName, blockTag = _a.blockTag;\n return _this.resolveName(addressOrName).then(function (address) {\n var params = { address: address, blockTag: checkBlockTag(blockTag) };\n return _this.perform('getCode', params).then(function (result) {\n return convert_1.hexlify(result);\n });\n });\n });\n });\n };\n Provider.prototype.getStorageAt = function (addressOrName, position, blockTag) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties({ addressOrName: addressOrName, position: position, blockTag: blockTag }).then(function (_a) {\n var addressOrName = _a.addressOrName, position = _a.position, blockTag = _a.blockTag;\n return _this.resolveName(addressOrName).then(function (address) {\n var params = {\n address: address,\n blockTag: checkBlockTag(blockTag),\n position: convert_1.hexStripZeros(convert_1.hexlify(position)),\n };\n return _this.perform('getStorageAt', params).then(function (result) {\n return convert_1.hexlify(result);\n });\n });\n });\n });\n };\n // @TODO: Shold this return the full tx instead of the hash? If so, that requires\n // the inclusion of secp256k1, which might be overkill for many applications...\n Provider.prototype.sendTransaction = function (signedTransaction) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties({ signedTransaction: signedTransaction }).then(function (_a) {\n var signedTransaction = _a.signedTransaction;\n var params = { signedTransaction: convert_1.hexlify(signedTransaction) };\n return _this.perform('sendTransaction', params).then(function (result) {\n result = convert_1.hexlify(result);\n if (result.length !== 66) {\n throw new Error('invalid response - sendTransaction');\n }\n return result;\n });\n });\n });\n };\n Provider.prototype.call = function (transaction) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties(transaction).then(function (transaction) {\n return _this._resolveNames(transaction, ['to', 'from']).then(function (transaction) {\n var params = { transaction: checkTransactionRequest(transaction) };\n return _this.perform('call', params).then(function (result) {\n return convert_1.hexlify(result);\n });\n });\n });\n });\n };\n Provider.prototype.estimateGas = function (transaction) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties(transaction).then(function (transaction) {\n return _this._resolveNames(transaction, ['to', 'from']).then(function (transaction) {\n var params = { transaction: checkTransactionRequest(transaction) };\n return _this.perform('estimateGas', params).then(function (result) {\n return bignumber_1.bigNumberify(result);\n });\n });\n });\n });\n };\n Provider.prototype.getBlock = function (blockHashOrBlockTag) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties({ blockHashOrBlockTag: blockHashOrBlockTag }).then(function (_a) {\n var blockHashOrBlockTag = _a.blockHashOrBlockTag;\n try {\n var blockHash = convert_1.hexlify(blockHashOrBlockTag);\n if (blockHash.length === 66) {\n return stallPromise(function () {\n return (_this._emitted['b:' + blockHash.toLowerCase()] == null);\n }, function () {\n return _this.perform('getBlock', { blockHash: blockHash }).then(function (block) {\n if (block == null) {\n return null;\n }\n return checkBlock(block);\n });\n });\n }\n }\n catch (error) { }\n try {\n var blockTag = checkBlockTag(blockHashOrBlockTag);\n return stallPromise(function () {\n if (convert_1.isHexString(blockTag)) {\n var blockNumber = parseInt(blockTag.substring(2), 16);\n return blockNumber > _this._emitted.block;\n }\n return true;\n }, function () {\n return _this.perform('getBlock', { blockTag: blockTag }).then(function (block) {\n if (block == null) {\n return null;\n }\n return checkBlock(block);\n });\n });\n }\n catch (error) { }\n throw new Error('invalid block hash or block tag');\n });\n });\n };\n Provider.prototype.getTransaction = function (transactionHash) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties({ transactionHash: transactionHash }).then(function (_a) {\n var transactionHash = _a.transactionHash;\n var params = { transactionHash: checkHash(transactionHash) };\n return stallPromise(function () {\n return (_this._emitted['t:' + transactionHash.toLowerCase()] == null);\n }, function () {\n return _this.perform('getTransaction', params).then(function (result) {\n if (result != null) {\n result = checkTransactionResponse(result);\n }\n return result;\n });\n });\n });\n });\n };\n Provider.prototype.getTransactionReceipt = function (transactionHash) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties({ transactionHash: transactionHash }).then(function (_a) {\n var transactionHash = _a.transactionHash;\n var params = { transactionHash: checkHash(transactionHash) };\n return stallPromise(function () {\n return (_this._emitted['t:' + transactionHash.toLowerCase()] == null);\n }, function () {\n return _this.perform('getTransactionReceipt', params).then(function (result) {\n if (result != null) {\n result = checkTransactionReceipt(result);\n }\n return result;\n });\n });\n });\n });\n };\n Provider.prototype.getLogs = function (filter) {\n var _this = this;\n return this.ready.then(function () {\n return properties_1.resolveProperties(filter).then(function (filter) {\n return _this._resolveNames(filter, ['address']).then(function (filter) {\n var params = { filter: checkFilter(filter) };\n return _this.perform('getLogs', params).then(function (result) {\n return arrayOf(checkLog)(result);\n });\n });\n });\n });\n };\n Provider.prototype.getEtherPrice = function () {\n var _this = this;\n return this.ready.then(function () {\n return _this.perform('getEtherPrice', {}).then(function (result) {\n // @TODO: Check valid float\n return result;\n });\n });\n };\n Provider.prototype._resolveNames = function (object, keys) {\n var promises = [];\n var result = copyObject(object);\n keys.forEach(function (key) {\n if (result[key] === undefined) {\n return;\n }\n promises.push(this.resolveName(result[key]).then(function (address) {\n result[key] = address;\n }));\n }, this);\n return Promise.all(promises).then(function () { return result; });\n };\n Provider.prototype._getResolver = function (name) {\n var _this = this;\n // Get the resolver from the blockchain\n return this.getNetwork().then(function (network) {\n // No ENS...\n if (!network.ensAddress) {\n errors.throwError('network does support ENS', errors.UNSUPPORTED_OPERATION, { operation: 'ENS', network: network.name });\n }\n // keccak256('resolver(bytes32)')\n var data = '0x0178b8bf' + namehash_1.namehash(name).substring(2);\n var transaction = { to: network.ensAddress, data: data };\n return _this.call(transaction).then(function (data) {\n // extract the address from the data\n if (data.length != 66) {\n return null;\n }\n return address_1.getAddress('0x' + data.substring(26));\n });\n });\n };\n Provider.prototype.resolveName = function (name) {\n var _this = this;\n // If it is a promise, resolve it then recurse\n if (name instanceof Promise) {\n return name.then(function (addressOrName) {\n return _this.resolveName(addressOrName);\n });\n }\n // If it is already an address, nothing to resolve\n try {\n return Promise.resolve(address_1.getAddress(name));\n }\n catch (error) { }\n var self = this;\n var nodeHash = namehash_1.namehash(name);\n // Get the addr from the resovler\n return this._getResolver(name).then(function (resolverAddress) {\n // keccak256('addr(bytes32)')\n var data = '0x3b3b57de' + nodeHash.substring(2);\n var transaction = { to: resolverAddress, data: data };\n return self.call(transaction);\n // extract the address from the data\n }).then(function (data) {\n if (data.length != 66) {\n return null;\n }\n var address = address_1.getAddress('0x' + data.substring(26));\n if (address === '0x0000000000000000000000000000000000000000') {\n return null;\n }\n return address;\n });\n };\n Provider.prototype.lookupAddress = function (address) {\n var _this = this;\n if (address instanceof Promise) {\n return address.then(function (address) {\n return _this.lookupAddress(address);\n });\n }\n address = address_1.getAddress(address);\n var name = address.substring(2) + '.addr.reverse';\n var nodehash = namehash_1.namehash(name);\n var self = this;\n return this._getResolver(name).then(function (resolverAddress) {\n if (!resolverAddress) {\n return null;\n }\n // keccak('name(bytes32)')\n var data = '0x691f3431' + nodehash.substring(2);\n var transaction = { to: resolverAddress, data: data };\n return self.call(transaction);\n }).then(function (data) {\n // Strip off the \"0x\"\n data = data.substring(2);\n // Strip off the dynamic string pointer (0x20)\n if (data.length < 64) {\n return null;\n }\n data = data.substring(64);\n if (data.length < 64) {\n return null;\n }\n var length = bignumber_1.bigNumberify('0x' + data.substring(0, 64)).toNumber();\n data = data.substring(64);\n if (2 * length > data.length) {\n return null;\n }\n var name = utf8_1.toUtf8String('0x' + data.substring(0, 2 * length));\n // Make sure the reverse record matches the foward record\n return self.resolveName(name).then(function (addr) {\n if (addr != address) {\n return null;\n }\n return name;\n });\n });\n };\n Provider.prototype.doPoll = function () {\n };\n Provider.prototype.perform = function (method, params) {\n errors.throwError(method + ' not implemented', errors.NOT_IMPLEMENTED, { operation: method });\n return null;\n };\n Provider.prototype._startPending = function () {\n console.log('WARNING: this provider does not support pending events');\n };\n Provider.prototype._stopPending = function () {\n };\n Provider.prototype.on = function (eventName, listener) {\n var key = getEventString(eventName);\n if (!this._events[key]) {\n this._events[key] = [];\n }\n this._events[key].push({ eventName: eventName, listener: listener, type: 'on' });\n if (key === 'pending') {\n this._startPending();\n }\n this.polling = true;\n return this;\n };\n Provider.prototype.once = function (eventName, listener) {\n var key = getEventString(eventName);\n if (!this._events[key]) {\n this._events[key] = [];\n }\n this._events[key].push({ eventName: eventName, listener: listener, type: 'once' });\n if (key === 'pending') {\n this._startPending();\n }\n this.polling = true;\n return this;\n };\n Provider.prototype.emit = function (eventName) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var result = false;\n var key = getEventString(eventName);\n //var args = Array.prototype.slice.call(arguments, 1);\n var listeners = this._events[key];\n if (!listeners) {\n return result;\n }\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n if (listener.type === 'once') {\n listeners.splice(i, 1);\n i--;\n }\n try {\n listener.listener.apply(this, args);\n result = true;\n }\n catch (error) {\n console.log('Event Listener Error: ' + error.message);\n }\n }\n if (listeners.length === 0) {\n delete this._events[key];\n if (key === 'pending') {\n this._stopPending();\n }\n }\n if (this.listenerCount() === 0) {\n this.polling = false;\n }\n return result;\n };\n // @TODO: type EventName\n Provider.prototype.listenerCount = function (eventName) {\n if (!eventName) {\n var result = 0;\n for (var key in this._events) {\n result += this._events[key].length;\n }\n return result;\n }\n var listeners = this._events[getEventString(eventName)];\n if (!listeners) {\n return 0;\n }\n return listeners.length;\n };\n // @TODO: func\n Provider.prototype.listeners = function (eventName) {\n var listeners = this._events[getEventString(eventName)];\n if (!listeners) {\n return [];\n }\n var result = [];\n for (var i = 0; i < listeners.length; i++) {\n result.push(listeners[i].listener);\n }\n return result;\n };\n Provider.prototype.removeAllListeners = function (eventName) {\n delete this._events[getEventString(eventName)];\n if (this.listenerCount() === 0) {\n this.polling = false;\n }\n return this;\n };\n Provider.prototype.removeListener = function (eventName, listener) {\n var eventNameString = getEventString(eventName);\n var listeners = this._events[eventNameString];\n if (!listeners) {\n return this;\n }\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].listener === listener) {\n listeners.splice(i, 1);\n break;\n }\n }\n if (listeners.length === 0) {\n this.removeAllListeners(eventName);\n }\n return this;\n };\n return Provider;\n}());\nexports.Provider = Provider;\n\n},{\"../utils/address\":54,\"../utils/bignumber\":55,\"../utils/convert\":56,\"../utils/errors\":57,\"../utils/namehash\":62,\"../utils/properties\":64,\"../utils/rlp\":66,\"../utils/utf8\":70,\"./networks\":50}],52:[function(require,module,exports){\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar json_rpc_provider_1 = require(\"./json-rpc-provider\");\nvar errors = __importStar(require(\"../utils/errors\"));\nvar Web3Provider = /** @class */ (function (_super) {\n __extends(Web3Provider, _super);\n function Web3Provider(web3Provider, network) {\n var _this = this;\n if (!web3Provider || !web3Provider.sendAsync) {\n errors.throwError('invalid web3Provider', errors.INVALID_ARGUMENT, { arg: 'web3Provider', value: web3Provider });\n }\n // HTTP has a host; IPC has a path.\n var url = web3Provider.host || web3Provider.path || 'unknown';\n _this = _super.call(this, url, network) || this;\n errors.checkNew(_this, Web3Provider);\n _this._web3Provider = web3Provider;\n return _this;\n }\n Web3Provider.prototype.send = function (method, params) {\n var _this = this;\n // Metamask complains about eth_sign (and on some versions hangs)\n if (method == 'eth_sign' && this._web3Provider.isMetaMask) {\n // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign\n method = 'personal_sign';\n params = [params[1], params[0]];\n }\n return new Promise(function (resolve, reject) {\n var request = {\n method: method,\n params: params,\n id: 42,\n jsonrpc: \"2.0\"\n };\n _this._web3Provider.sendAsync(request, function (error, result) {\n if (error) {\n reject(error);\n return;\n }\n if (result.error) {\n // @TODO: not any\n var error = new Error(result.error.message);\n error.code = result.error.code;\n error.data = result.error.data;\n reject(error);\n return;\n }\n resolve(result.result);\n });\n });\n };\n return Web3Provider;\n}(json_rpc_provider_1.JsonRpcProvider));\nexports.Web3Provider = Web3Provider;\n\n},{\"../utils/errors\":57,\"./json-rpc-provider\":49}],53:[function(require,module,exports){\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\nvar address_1 = require(\"./address\");\nvar bignumber_1 = require(\"./bignumber\");\nvar convert_1 = require(\"./convert\");\nvar utf8_1 = require(\"./utf8\");\nvar errors = __importStar(require(\"./errors\"));\nvar paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nvar paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\nvar paramTypeArray = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\nfunction defaultCoerceFunc(type, value) {\n var match = type.match(paramTypeNumber);\n if (match && parseInt(match[2]) <= 48) {\n return value.toNumber();\n }\n return value;\n}\nexports.defaultCoerceFunc = defaultCoerceFunc;\n///////////////////////////////////\n// Parsing for Solidity Signatures\nvar regexParen = new RegExp(\"^([^)(]*)\\\\((.*)\\\\)([^)(]*)$\");\nvar regexIdentifier = new RegExp(\"^[A-Za-z_][A-Za-z0-9_]*$\");\nfunction verifyType(type) {\n // These need to be transformed to their full description\n if (type.match(/^uint($|[^1-9])/)) {\n type = 'uint256' + type.substring(4);\n }\n else if (type.match(/^int($|[^1-9])/)) {\n type = 'int256' + type.substring(3);\n }\n return type;\n}\nfunction parseParam(param, allowIndexed) {\n function throwError(i) {\n throw new Error('unexpected character \"' + param[i] + '\" at position ' + i + ' in \"' + param + '\"');\n }\n var parent = { type: '', name: '', state: { allowType: true } };\n var node = parent;\n for (var i = 0; i < param.length; i++) {\n var c = param[i];\n switch (c) {\n case '(':\n if (!node.state.allowParams) {\n throwError(i);\n }\n node.state.allowType = false;\n node.type = verifyType(node.type);\n node.components = [{ type: '', name: '', parent: node, state: { allowType: true } }];\n node = node.components[0];\n break;\n case ')':\n delete node.state;\n node.type = verifyType(node.type);\n var child = node;\n node = node.parent;\n if (!node) {\n throwError(i);\n }\n delete child.parent;\n node.state.allowParams = false;\n node.state.allowName = true;\n node.state.allowArray = true;\n break;\n case ',':\n delete node.state;\n node.type = verifyType(node.type);\n var sibling = { type: '', name: '', parent: node.parent, state: { allowType: true } };\n node.parent.components.push(sibling);\n delete node.parent;\n node = sibling;\n break;\n // Hit a space...\n case ' ':\n // If reading type, the type is done and may read a param or name\n if (node.state.allowType) {\n if (node.type !== '') {\n node.type = verifyType(node.type);\n delete node.state.allowType;\n node.state.allowName = true;\n node.state.allowParams = true;\n }\n }\n // If reading name, the name is done\n if (node.state.allowName) {\n if (node.name !== '') {\n if (allowIndexed && node.name === 'indexed') {\n node.indexed = true;\n node.name = '';\n }\n else {\n node.state.allowName = false;\n }\n }\n }\n break;\n case '[':\n if (!node.state.allowArray) {\n throwError(i);\n }\n node.type += c;\n node.state.allowArray = false;\n node.state.allowName = false;\n node.state.readArray = true;\n break;\n case ']':\n if (!node.state.readArray) {\n throwError(i);\n }\n node.type += c;\n node.state.readArray = false;\n node.state.allowArray = true;\n node.state.allowName = true;\n break;\n default:\n if (node.state.allowType) {\n node.type += c;\n node.state.allowParams = true;\n node.state.allowArray = true;\n }\n else if (node.state.allowName) {\n node.name += c;\n delete node.state.allowArray;\n }\n else if (node.state.readArray) {\n node.type += c;\n }\n else {\n throwError(i);\n }\n }\n }\n if (node.parent) {\n throw new Error(\"unexpected eof\");\n }\n delete parent.state;\n parent.type = verifyType(parent.type);\n return parent;\n}\n// @TODO: Better return type\nfunction parseSignatureEvent(fragment) {\n var abi = {\n anonymous: false,\n inputs: [],\n name: '',\n type: 'event'\n };\n var match = fragment.match(regexParen);\n if (!match) {\n throw new Error('invalid event: ' + fragment);\n }\n abi.name = match[1].trim();\n splitNesting(match[2]).forEach(function (param) {\n param = parseParam(param, true);\n param.indexed = !!param.indexed;\n abi.inputs.push(param);\n });\n match[3].split(' ').forEach(function (modifier) {\n switch (modifier) {\n case 'anonymous':\n abi.anonymous = true;\n break;\n case '':\n break;\n default:\n console.log('unknown modifier: ' + modifier);\n }\n });\n if (abi.name && !abi.name.match(regexIdentifier)) {\n throw new Error('invalid identifier: \"' + abi.name + '\"');\n }\n return abi;\n}\nfunction parseSignatureFunction(fragment) {\n var abi = {\n constant: false,\n inputs: [],\n name: '',\n outputs: [],\n payable: false,\n stateMutability: null,\n type: 'function'\n };\n var comps = fragment.split(' returns ');\n var left = comps[0].match(regexParen);\n if (!left) {\n throw new Error('invalid signature');\n }\n abi.name = left[1].trim();\n if (!abi.name.match(regexIdentifier)) {\n throw new Error('invalid identifier: \"' + left[1] + '\"');\n }\n splitNesting(left[2]).forEach(function (param) {\n abi.inputs.push(parseParam(param));\n });\n left[3].split(' ').forEach(function (modifier) {\n switch (modifier) {\n case 'constant':\n abi.constant = true;\n break;\n case 'payable':\n abi.payable = true;\n break;\n case 'pure':\n abi.constant = true;\n abi.stateMutability = 'pure';\n break;\n case 'view':\n abi.constant = true;\n abi.stateMutability = 'view';\n break;\n case '':\n break;\n default:\n console.log('unknown modifier: ' + modifier);\n }\n });\n // We have outputs\n if (comps.length > 1) {\n var right = comps[1].match(regexParen);\n if (right[1].trim() != '' || right[3].trim() != '') {\n throw new Error('unexpected tokens');\n }\n splitNesting(right[2]).forEach(function (param) {\n abi.outputs.push(parseParam(param));\n });\n }\n return abi;\n}\nfunction parseSignature(fragment) {\n if (typeof (fragment) === 'string') {\n // Make sure the \"returns\" is surrounded by a space and all whitespace is exactly one space\n fragment = fragment.replace(/\\(/g, ' (').replace(/\\)/g, ') ').replace(/\\s+/g, ' ');\n fragment = fragment.trim();\n if (fragment.substring(0, 6) === 'event ') {\n return parseSignatureEvent(fragment.substring(6).trim());\n }\n else {\n if (fragment.substring(0, 9) === 'function ') {\n fragment = fragment.substring(9);\n }\n return parseSignatureFunction(fragment.trim());\n }\n }\n throw new Error('unknown fragment');\n}\nexports.parseSignature = parseSignature;\nvar Coder = /** @class */ (function () {\n function Coder(coerceFunc, name, type, localName, dynamic) {\n this.coerceFunc = coerceFunc;\n this.name = name;\n this.type = type;\n this.localName = localName;\n this.dynamic = dynamic;\n }\n return Coder;\n}());\nvar CoderNull = /** @class */ (function (_super) {\n __extends(CoderNull, _super);\n function CoderNull(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'null', '', localName, false) || this;\n }\n CoderNull.prototype.encode = function (value) {\n return convert_1.arrayify([]);\n };\n CoderNull.prototype.decode = function (data, offset) {\n if (offset > data.length) {\n throw new Error('invalid null');\n }\n return {\n consumed: 0,\n value: this.coerceFunc('null', undefined)\n };\n };\n return CoderNull;\n}(Coder));\nvar CoderNumber = /** @class */ (function (_super) {\n __extends(CoderNumber, _super);\n function CoderNumber(coerceFunc, size, signed, localName) {\n var _this = this;\n var name = ((signed ? 'int' : 'uint') + (size * 8));\n _this = _super.call(this, coerceFunc, name, name, localName, false) || this;\n _this.size = size;\n _this.signed = signed;\n return _this;\n }\n CoderNumber.prototype.encode = function (value) {\n try {\n var v = bignumber_1.bigNumberify(value);\n v = v.toTwos(this.size * 8).maskn(this.size * 8);\n //value = value.toTwos(size * 8).maskn(size * 8);\n if (this.signed) {\n v = v.fromTwos(this.size * 8).toTwos(256);\n }\n return convert_1.padZeros(convert_1.arrayify(v), 32);\n }\n catch (error) {\n errors.throwError('invalid number value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof (value),\n value: value\n });\n }\n return null;\n };\n CoderNumber.prototype.decode = function (data, offset) {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for ' + this.name + ' type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: this.name,\n value: convert_1.hexlify(data.slice(offset, offset + 32))\n });\n }\n var junkLength = 32 - this.size;\n var value = bignumber_1.bigNumberify(data.slice(offset + junkLength, offset + 32));\n if (this.signed) {\n value = value.fromTwos(this.size * 8);\n }\n else {\n value = value.maskn(this.size * 8);\n }\n return {\n consumed: 32,\n value: this.coerceFunc(this.name, value),\n };\n };\n return CoderNumber;\n}(Coder));\nvar uint256Coder = new CoderNumber(function (type, value) { return value; }, 32, false, 'none');\nvar CoderBoolean = /** @class */ (function (_super) {\n __extends(CoderBoolean, _super);\n function CoderBoolean(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'bool', 'bool', localName, false) || this;\n }\n CoderBoolean.prototype.encode = function (value) {\n return uint256Coder.encode(!!value ? 1 : 0);\n };\n CoderBoolean.prototype.decode = function (data, offset) {\n try {\n var result = uint256Coder.decode(data, offset);\n }\n catch (error) {\n if (error.reason === 'insufficient data for uint256 type') {\n errors.throwError('insufficient data for boolean type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'boolean',\n value: error.value\n });\n }\n throw error;\n }\n return {\n consumed: result.consumed,\n value: this.coerceFunc('bool', !result.value.isZero())\n };\n };\n return CoderBoolean;\n}(Coder));\nvar CoderFixedBytes = /** @class */ (function (_super) {\n __extends(CoderFixedBytes, _super);\n function CoderFixedBytes(coerceFunc, length, localName) {\n var _this = this;\n var name = ('bytes' + length);\n _this = _super.call(this, coerceFunc, name, name, localName, false) || this;\n _this.length = length;\n return _this;\n }\n CoderFixedBytes.prototype.encode = function (value) {\n var result = new Uint8Array(32);\n try {\n var data = convert_1.arrayify(value);\n if (data.length > 32) {\n throw new Error();\n }\n result.set(data);\n }\n catch (error) {\n errors.throwError('invalid ' + this.name + ' value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof (value),\n value: (error.value || value)\n });\n }\n return result;\n };\n CoderFixedBytes.prototype.decode = function (data, offset) {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for ' + name + ' type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: this.name,\n value: convert_1.hexlify(data.slice(offset, offset + 32))\n });\n }\n return {\n consumed: 32,\n value: this.coerceFunc(this.name, convert_1.hexlify(data.slice(offset, offset + this.length)))\n };\n };\n return CoderFixedBytes;\n}(Coder));\nvar CoderAddress = /** @class */ (function (_super) {\n __extends(CoderAddress, _super);\n function CoderAddress(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'address', 'address', localName, false) || this;\n }\n CoderAddress.prototype.encode = function (value) {\n var result = new Uint8Array(32);\n try {\n result.set(convert_1.arrayify(address_1.getAddress(value)), 12);\n }\n catch (error) {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof (value),\n value: value\n });\n }\n return result;\n };\n CoderAddress.prototype.decode = function (data, offset) {\n if (data.length < offset + 32) {\n errors.throwError('insufficuent data for address type', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'address',\n value: convert_1.hexlify(data.slice(offset, offset + 32))\n });\n }\n return {\n consumed: 32,\n value: this.coerceFunc('address', address_1.getAddress(convert_1.hexlify(data.slice(offset + 12, offset + 32))))\n };\n };\n return CoderAddress;\n}(Coder));\nfunction _encodeDynamicBytes(value) {\n var dataLength = Math.trunc(32 * Math.ceil(value.length / 32));\n var padding = new Uint8Array(dataLength - value.length);\n return convert_1.concat([\n uint256Coder.encode(value.length),\n value,\n padding\n ]);\n}\nfunction _decodeDynamicBytes(data, offset, localName) {\n if (data.length < offset + 32) {\n errors.throwError('insufficient data for dynamicBytes length', errors.INVALID_ARGUMENT, {\n arg: localName,\n coderType: 'dynamicBytes',\n value: convert_1.hexlify(data.slice(offset, offset + 32))\n });\n }\n var length = uint256Coder.decode(data, offset).value;\n try {\n length = length.toNumber();\n }\n catch (error) {\n errors.throwError('dynamic bytes count too large', errors.INVALID_ARGUMENT, {\n arg: localName,\n coderType: 'dynamicBytes',\n value: length.toString()\n });\n }\n if (data.length < offset + 32 + length) {\n errors.throwError('insufficient data for dynamicBytes type', errors.INVALID_ARGUMENT, {\n arg: localName,\n coderType: 'dynamicBytes',\n value: convert_1.hexlify(data.slice(offset, offset + 32 + length))\n });\n }\n return {\n consumed: Math.trunc(32 + 32 * Math.ceil(length / 32)),\n value: data.slice(offset + 32, offset + 32 + length),\n };\n}\nvar CoderDynamicBytes = /** @class */ (function (_super) {\n __extends(CoderDynamicBytes, _super);\n function CoderDynamicBytes(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'bytes', 'bytes', localName, true) || this;\n }\n CoderDynamicBytes.prototype.encode = function (value) {\n try {\n return _encodeDynamicBytes(convert_1.arrayify(value));\n }\n catch (error) {\n errors.throwError('invalid bytes value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof (value),\n value: error.value\n });\n }\n return null;\n };\n CoderDynamicBytes.prototype.decode = function (data, offset) {\n var result = _decodeDynamicBytes(data, offset, this.localName);\n result.value = this.coerceFunc('bytes', convert_1.hexlify(result.value));\n return result;\n };\n return CoderDynamicBytes;\n}(Coder));\nvar CoderString = /** @class */ (function (_super) {\n __extends(CoderString, _super);\n function CoderString(coerceFunc, localName) {\n return _super.call(this, coerceFunc, 'string', 'string', localName, true) || this;\n }\n CoderString.prototype.encode = function (value) {\n if (typeof (value) !== 'string') {\n errors.throwError('invalid string value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n type: typeof (value),\n value: value\n });\n }\n return _encodeDynamicBytes(utf8_1.toUtf8Bytes(value));\n };\n CoderString.prototype.decode = function (data, offset) {\n var result = _decodeDynamicBytes(data, offset, this.localName);\n result.value = this.coerceFunc('string', utf8_1.toUtf8String(result.value));\n return result;\n };\n return CoderString;\n}(Coder));\nfunction alignSize(size) {\n return Math.trunc(32 * Math.ceil(size / 32));\n}\nfunction pack(coders, values) {\n if (Array.isArray(values)) {\n // do nothing\n }\n else if (values && typeof (values) === 'object') {\n var arrayValues = [];\n coders.forEach(function (coder) {\n arrayValues.push(values[coder.localName]);\n });\n values = arrayValues;\n }\n else {\n errors.throwError('invalid tuple value', errors.INVALID_ARGUMENT, {\n coderType: 'tuple',\n type: typeof (values),\n value: values\n });\n }\n if (coders.length !== values.length) {\n errors.throwError('types/value length mismatch', errors.INVALID_ARGUMENT, {\n coderType: 'tuple',\n value: values\n });\n }\n var parts = [];\n coders.forEach(function (coder, index) {\n parts.push({ dynamic: coder.dynamic, value: coder.encode(values[index]) });\n });\n var staticSize = 0, dynamicSize = 0;\n parts.forEach(function (part) {\n if (part.dynamic) {\n staticSize += 32;\n dynamicSize += alignSize(part.value.length);\n }\n else {\n staticSize += alignSize(part.value.length);\n }\n });\n var offset = 0, dynamicOffset = staticSize;\n var data = new Uint8Array(staticSize + dynamicSize);\n parts.forEach(function (part) {\n if (part.dynamic) {\n //uint256Coder.encode(dynamicOffset).copy(data, offset);\n data.set(uint256Coder.encode(dynamicOffset), offset);\n offset += 32;\n //part.value.copy(data, dynamicOffset); @TODO\n data.set(part.value, dynamicOffset);\n dynamicOffset += alignSize(part.value.length);\n }\n else {\n //part.value.copy(data, offset); @TODO\n data.set(part.value, offset);\n offset += alignSize(part.value.length);\n }\n });\n return data;\n}\nfunction unpack(coders, data, offset) {\n var baseOffset = offset;\n var consumed = 0;\n var value = [];\n coders.forEach(function (coder) {\n if (coder.dynamic) {\n var dynamicOffset = uint256Coder.decode(data, offset);\n var result = coder.decode(data, baseOffset + dynamicOffset.value.toNumber());\n // The dynamic part is leap-frogged somewhere else; doesn't count towards size\n result.consumed = dynamicOffset.consumed;\n }\n else {\n var result = coder.decode(data, offset);\n }\n if (result.value != undefined) {\n value.push(result.value);\n }\n offset += result.consumed;\n consumed += result.consumed;\n });\n coders.forEach(function (coder, index) {\n var name = coder.localName;\n if (!name) {\n return;\n }\n if (name === 'length') {\n name = '_length';\n }\n if (value[name] != null) {\n return;\n }\n value[name] = value[index];\n });\n return {\n value: value,\n consumed: consumed\n };\n}\nvar CoderArray = /** @class */ (function (_super) {\n __extends(CoderArray, _super);\n function CoderArray(coerceFunc, coder, length, localName) {\n var _this = this;\n var type = (coder.type + '[' + (length >= 0 ? length : '') + ']');\n var dynamic = (length === -1 || coder.dynamic);\n _this = _super.call(this, coerceFunc, 'array', type, localName, dynamic) || this;\n _this.coder = coder;\n _this.length = length;\n return _this;\n }\n CoderArray.prototype.encode = function (value) {\n if (!Array.isArray(value)) {\n errors.throwError('expected array value', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n type: typeof (value),\n value: value\n });\n }\n var count = this.length;\n var result = new Uint8Array(0);\n if (count === -1) {\n count = value.length;\n result = uint256Coder.encode(count);\n }\n if (count !== value.length) {\n errors.throwError('array value length mismatch', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n count: value.length,\n expectedCount: count,\n value: value\n });\n }\n var coders = [];\n for (var i = 0; i < value.length; i++) {\n coders.push(this.coder);\n }\n return convert_1.concat([result, pack(coders, value)]);\n };\n CoderArray.prototype.decode = function (data, offset) {\n // @TODO:\n //if (data.length < offset + length * 32) { throw new Error('invalid array'); }\n var consumed = 0;\n var count = this.length;\n if (count === -1) {\n try {\n var decodedLength = uint256Coder.decode(data, offset);\n }\n catch (error) {\n errors.throwError('insufficient data for dynamic array length', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n value: error.value\n });\n }\n try {\n count = decodedLength.value.toNumber();\n }\n catch (error) {\n errors.throwError('array count too large', errors.INVALID_ARGUMENT, {\n arg: this.localName,\n coderType: 'array',\n value: decodedLength.value.toString()\n });\n }\n consumed += decodedLength.consumed;\n offset += decodedLength.consumed;\n }\n var coders = [];\n for (var i = 0; i < count; i++) {\n coders.push(this.coder);\n }\n var result = unpack(coders, data, offset);\n result.consumed += consumed;\n result.value = this.coerceFunc(this.type, result.value);\n return result;\n };\n return CoderArray;\n}(Coder));\nvar CoderTuple = /** @class */ (function (_super) {\n __extends(CoderTuple, _super);\n function CoderTuple(coerceFunc, coders, localName) {\n var _this = this;\n var dynamic = false;\n var types = [];\n coders.forEach(function (coder) {\n if (coder.dynamic) {\n dynamic = true;\n }\n types.push(coder.type);\n });\n var type = ('tuple(' + types.join(',') + ')');\n _this = _super.call(this, coerceFunc, 'tuple', type, localName, dynamic) || this;\n _this.coders = coders;\n return _this;\n }\n CoderTuple.prototype.encode = function (value) {\n return pack(this.coders, value);\n };\n CoderTuple.prototype.decode = function (data, offset) {\n var result = unpack(this.coders, data, offset);\n result.value = this.coerceFunc(this.type, result.value);\n return result;\n };\n return CoderTuple;\n}(Coder));\n/*\nfunction getTypes(coders) {\n var type = coderTuple(coders).type;\n return type.substring(6, type.length - 1);\n}\n*/\nfunction splitNesting(value) {\n var result = [];\n var accum = '';\n var depth = 0;\n for (var offset = 0; offset < value.length; offset++) {\n var c = value[offset];\n if (c === ',' && depth === 0) {\n result.push(accum);\n accum = '';\n }\n else {\n accum += c;\n if (c === '(') {\n depth++;\n }\n else if (c === ')') {\n depth--;\n if (depth === -1) {\n throw new Error('unbalanced parenthsis');\n }\n }\n }\n }\n result.push(accum);\n return result;\n}\nvar paramTypeSimple = {\n address: CoderAddress,\n bool: CoderBoolean,\n string: CoderString,\n bytes: CoderDynamicBytes,\n};\nfunction getTupleParamCoder(coerceFunc, components, localName) {\n if (!components) {\n components = [];\n }\n var coders = [];\n components.forEach(function (component) {\n coders.push(getParamCoder(coerceFunc, component));\n });\n return new CoderTuple(coerceFunc, coders, localName);\n}\nfunction getParamCoder(coerceFunc, param) {\n var coder = paramTypeSimple[param.type];\n if (coder) {\n return new coder(coerceFunc, param.name);\n }\n var match = param.type.match(paramTypeNumber);\n if (match) {\n var size = parseInt(match[2] || \"256\");\n if (size === 0 || size > 256 || (size % 8) !== 0) {\n errors.throwError('invalid ' + match[1] + ' bit length', errors.INVALID_ARGUMENT, {\n arg: 'param',\n value: param\n });\n }\n return new CoderNumber(coerceFunc, size / 8, (match[1] === 'int'), param.name);\n }\n var match = param.type.match(paramTypeBytes);\n if (match) {\n var size = parseInt(match[1]);\n if (size === 0 || size > 32) {\n errors.throwError('invalid bytes length', errors.INVALID_ARGUMENT, {\n arg: 'param',\n value: param\n });\n }\n return new CoderFixedBytes(coerceFunc, size, param.name);\n }\n var match = param.type.match(paramTypeArray);\n if (match) {\n var size = parseInt(match[2] || \"-1\");\n param.type = match[1];\n return new CoderArray(coerceFunc, getParamCoder(coerceFunc, param), size, param.name);\n }\n if (param.type.substring(0, 5) === 'tuple') {\n return getTupleParamCoder(coerceFunc, param.components, param.name);\n }\n if (param.type === '') {\n return new CoderNull(coerceFunc, param.name);\n }\n errors.throwError('invalid type', errors.INVALID_ARGUMENT, {\n arg: 'type',\n value: param.type\n });\n return null;\n}\nvar AbiCoder = /** @class */ (function () {\n function AbiCoder(coerceFunc) {\n //if (!(this instanceof Coder)) { throw new Error('missing new'); }\n if (!coerceFunc) {\n coerceFunc = defaultCoerceFunc;\n }\n // @TODO: readonly\n this.coerceFunc = coerceFunc;\n }\n AbiCoder.prototype.encode = function (types, values) {\n if (types.length !== values.length) {\n errors.throwError('types/values length mismatch', errors.INVALID_ARGUMENT, {\n count: { types: types.length, values: values.length },\n value: { types: types, values: values }\n });\n }\n var coders = [];\n types.forEach(function (type) {\n // Convert types to type objects\n // - \"uint foo\" => { type: \"uint\", name: \"foo\" }\n // - \"tuple(uint, uint)\" => { type: \"tuple\", components: [ { type: \"uint\" }, { type: \"uint\" }, ] }\n if (typeof (type) === 'string') {\n type = parseParam(type);\n }\n coders.push(getParamCoder(this.coerceFunc, type));\n }, this);\n return convert_1.hexlify(new CoderTuple(this.coerceFunc, coders, '_').encode(values));\n };\n AbiCoder.prototype.decode = function (types, data) {\n var coders = [];\n types.forEach(function (type) {\n // See encode for details\n if (typeof (type) === 'string') {\n type = parseParam(type);\n }\n coders.push(getParamCoder(this.coerceFunc, type));\n }, this);\n return new CoderTuple(this.coerceFunc, coders, '_').decode(convert_1.arrayify(data), 0).value;\n };\n return AbiCoder;\n}());\nexports.AbiCoder = AbiCoder;\nexports.defaultAbiCoder = new AbiCoder();\n\n},{\"./address\":54,\"./bignumber\":55,\"./convert\":56,\"./errors\":57,\"./utf8\":70}],54:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// We use this for base 36 maths\nvar BN = require(\"bn.js\");\nvar convert_1 = require(\"./convert\");\nvar keccak256_1 = require(\"./keccak256\");\nvar rlp_1 = require(\"./rlp\");\nvar errors = require(\"./errors\");\nfunction getChecksumAddress(address) {\n if (typeof (address) !== 'string' || !address.match(/^0x[0-9A-Fa-f]{40}$/)) {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n address = address.toLowerCase();\n var chars = address.substring(2).split('');\n var hashed = new Uint8Array(40);\n for (var i_1 = 0; i_1 < 40; i_1++) {\n hashed[i_1] = chars[i_1].charCodeAt(0);\n }\n hashed = convert_1.arrayify(keccak256_1.keccak256(hashed));\n for (var i = 0; i < 40; i += 2) {\n if ((hashed[i >> 1] >> 4) >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n return '0x' + chars.join('');\n}\n// Shims for environments that are missing some required constants and functions\nvar MAX_SAFE_INTEGER = 0x1fffffffffffff;\nfunction log10(x) {\n if (Math.log10) {\n return Math.log10(x);\n }\n return Math.log(x) / Math.LN10;\n}\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n// Create lookup table\nvar ibanLookup = {};\nfor (var i = 0; i < 10; i++) {\n ibanLookup[String(i)] = String(i);\n}\nfor (var i = 0; i < 26; i++) {\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\n}\n// How many decimal digits can we process? (for 64-bit float, this is 15)\nvar safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));\nfunction ibanChecksum(address) {\n address = address.toUpperCase();\n address = address.substring(4) + address.substring(0, 2) + '00';\n var expanded = '';\n address.split('').forEach(function (c) {\n expanded += ibanLookup[c];\n });\n // Javascript can handle integers safely up to 15 (decimal) digits\n while (expanded.length >= safeDigits) {\n var block = expanded.substring(0, safeDigits);\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n }\n var checksum = String(98 - (parseInt(expanded, 10) % 97));\n while (checksum.length < 2) {\n checksum = '0' + checksum;\n }\n return checksum;\n}\n;\nfunction getAddress(address, icapFormat) {\n var result = null;\n if (typeof (address) !== 'string') {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n // Missing the 0x prefix\n if (address.substring(0, 2) !== '0x') {\n address = '0x' + address;\n }\n result = getChecksumAddress(address);\n // It is a checksummed address with a bad checksum\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\n errors.throwError('bad address checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n // Maybe ICAP? (we only support direct mode)\n }\n else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n // It is an ICAP address with a bad checksum\n if (address.substring(2, 4) !== ibanChecksum(address)) {\n errors.throwError('bad icap checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n result = (new BN(address.substring(4), 36)).toString(16);\n while (result.length < 40) {\n result = '0' + result;\n }\n result = getChecksumAddress('0x' + result);\n }\n else {\n errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });\n }\n if (icapFormat) {\n var base36 = (new BN(result.substring(2), 16)).toString(36).toUpperCase();\n while (base36.length < 30) {\n base36 = '0' + base36;\n }\n return 'XE' + ibanChecksum('XE00' + base36) + base36;\n }\n return result;\n}\nexports.getAddress = getAddress;\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\nfunction getContractAddress(transaction) {\n if (!transaction.from) {\n throw new Error('missing from address');\n }\n var nonce = transaction.nonce;\n return getAddress('0x' + keccak256_1.keccak256(rlp_1.encode([\n getAddress(transaction.from),\n convert_1.stripZeros(convert_1.hexlify(nonce))\n ])).substring(26));\n}\nexports.getContractAddress = getContractAddress;\n\n},{\"./convert\":56,\"./errors\":57,\"./keccak256\":61,\"./rlp\":66,\"bn.js\":2}],55:[function(require,module,exports){\n'use strict';\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * BigNumber\n *\n * A wrapper around the BN.js object. We use the BN.js library\n * because it is used by elliptic, so it is required regardles.\n *\n */\nvar bn_js_1 = __importDefault(require(\"bn.js\"));\n/*\ndeclare module _BN {\n\nclass BN {\n constructor(number: string | number, base?: number);\n\n\n toString(radix?: number): string;\n toNumber(): number;\n\n fromTwos(value: any): BN;\n toTwos(value: any): BN;\n add(other: any): BN;\n sub(other: any): BN;\n div(other: any): BN;\n mul(other: any): BN;\n mod(modulo: any): BN;\n pow(exponent: any): BN;\n maskn(bits: number): BN;\n\n eq(other: BN): boolean;\n gte(other: BN): boolean;\n gt(other: BN): boolean;\n lte(other: BN): boolean;\n lt(other: BN): boolean;\n isZero(): boolean;\n\n static isBN(value: any): boolean;\n}\n}\n*/\nvar convert_1 = require(\"./convert\");\nvar errors = __importStar(require(\"../utils/errors\"));\nfunction _isBigNumber(value) {\n return isBigNumber(value);\n}\nvar BigNumber = /** @class */ (function () {\n function BigNumber(value) {\n if (!(this instanceof BigNumber)) {\n throw new Error('missing new');\n }\n if (typeof (value) === 'string') {\n if (convert_1.isHexString(value)) {\n if (value == '0x') {\n value = '0x0';\n }\n this._bn = new bn_js_1.default.BN(value.substring(2), 16);\n }\n else if (value[0] === '-' && convert_1.isHexString(value.substring(1))) {\n this._bn = (new bn_js_1.default.BN(value.substring(3), 16)).mul(exports.ConstantNegativeOne._bn);\n }\n else if (value.match(/^-?[0-9]*$/)) {\n if (value == '') {\n value = '0';\n }\n this._bn = new bn_js_1.default.BN(value);\n }\n }\n else if (typeof (value) === 'number') {\n if (Math.trunc(value) !== value) {\n errors.throwError('underflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'underflow', value: value, outputValue: Math.trunc(value) });\n }\n try {\n this._bn = new bn_js_1.default.BN(value);\n }\n catch (error) {\n errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });\n }\n }\n else if (bn_js_1.default.BN.isBN(value)) {\n this._bn = value;\n }\n else if (_isBigNumber(value)) {\n this._bn = value._bn;\n }\n else if (convert_1.isArrayish(value)) {\n this._bn = new bn_js_1.default.BN(convert_1.hexlify(value).substring(2), 16);\n }\n else {\n errors.throwError('invalid BigNumber value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n }\n BigNumber.prototype.fromTwos = function (value) {\n return new BigNumber(this._bn.fromTwos(value));\n };\n BigNumber.prototype.toTwos = function (value) {\n return new BigNumber(this._bn.toTwos(value));\n };\n BigNumber.prototype.add = function (other) {\n return new BigNumber(this._bn.add(bigNumberify(other)._bn));\n };\n BigNumber.prototype.sub = function (other) {\n return new BigNumber(this._bn.sub(bigNumberify(other)._bn));\n };\n BigNumber.prototype.div = function (other) {\n var o = bigNumberify(other)._bn;\n if (o.isZero()) {\n errors.throwError('division by zero', errors.NUMERIC_FAULT, { operation: 'divide', fault: 'division by zero' });\n }\n return new BigNumber(this._bn.div(o));\n };\n BigNumber.prototype.mul = function (other) {\n return new BigNumber(this._bn.mul(bigNumberify(other)._bn));\n };\n BigNumber.prototype.mod = function (other) {\n return new BigNumber(this._bn.mod(bigNumberify(other)._bn));\n };\n BigNumber.prototype.pow = function (other) {\n return new BigNumber(this._bn.pow(bigNumberify(other)._bn));\n };\n BigNumber.prototype.maskn = function (value) {\n return new BigNumber(this._bn.maskn(value));\n };\n BigNumber.prototype.eq = function (other) {\n return this._bn.eq(bigNumberify(other)._bn);\n };\n BigNumber.prototype.lt = function (other) {\n return this._bn.lt(bigNumberify(other)._bn);\n };\n BigNumber.prototype.lte = function (other) {\n return this._bn.lte(bigNumberify(other)._bn);\n };\n BigNumber.prototype.gt = function (other) {\n return this._bn.gt(bigNumberify(other)._bn);\n };\n BigNumber.prototype.gte = function (other) {\n return this._bn.gte(bigNumberify(other)._bn);\n };\n BigNumber.prototype.isZero = function () {\n return this._bn.isZero();\n };\n BigNumber.prototype.toNumber = function () {\n try {\n return this._bn.toNumber();\n }\n catch (error) {\n errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });\n }\n return null;\n };\n BigNumber.prototype.toString = function () {\n return this._bn.toString(10);\n };\n BigNumber.prototype.toHexString = function () {\n var hex = this._bn.toString(16);\n if (hex.length % 2) {\n hex = '0' + hex;\n }\n return '0x' + hex;\n };\n return BigNumber;\n}());\nexports.BigNumber = BigNumber;\nfunction isBigNumber(value) {\n return (value._bn && value._bn.mod);\n}\nexports.isBigNumber = isBigNumber;\nfunction bigNumberify(value) {\n if (_isBigNumber(value)) {\n return value;\n }\n return new BigNumber(value);\n}\nexports.bigNumberify = bigNumberify;\nexports.ConstantNegativeOne = bigNumberify(-1);\nexports.ConstantZero = bigNumberify(0);\nexports.ConstantOne = bigNumberify(1);\nexports.ConstantTwo = bigNumberify(2);\nexports.ConstantWeiPerEther = bigNumberify(new bn_js_1.default.BN('1000000000000000000'));\n\n},{\"../utils/errors\":57,\"./convert\":56,\"bn.js\":2}],56:[function(require,module,exports){\n\"use strict\";\n/**\n * Conversion Utilities\n *\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar errors = require(\"./errors\");\nfunction isBigNumber(value) {\n return !!value._bn;\n}\nfunction addSlice(array) {\n if (array.slice) {\n return array;\n }\n array.slice = function () {\n var args = Array.prototype.slice.call(arguments);\n return new Uint8Array(Array.prototype.slice.apply(array, args));\n };\n return array;\n}\nfunction isArrayish(value) {\n if (!value || parseInt(value.length) != value.length || typeof (value) === 'string') {\n return false;\n }\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n if (v < 0 || v >= 256 || parseInt(v) != v) {\n return false;\n }\n }\n return true;\n}\nexports.isArrayish = isArrayish;\nfunction arrayify(value) {\n if (value == null) {\n errors.throwError('cannot convert null value to array', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n if (isBigNumber(value)) {\n value = value.toHexString();\n }\n if (typeof (value) === 'string') {\n var match = value.match(/^(0x)?[0-9a-fA-F]*$/);\n if (!match) {\n errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n if (match[1] !== '0x') {\n errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n value = value.substring(2);\n if (value.length % 2) {\n value = '0' + value;\n }\n var result = [];\n for (var i = 0; i < value.length; i += 2) {\n result.push(parseInt(value.substr(i, 2), 16));\n }\n return addSlice(new Uint8Array(result));\n }\n else if (typeof (value) === 'string') {\n }\n if (isArrayish(value)) {\n return addSlice(new Uint8Array(value));\n }\n errors.throwError('invalid arrayify value', null, { arg: 'value', value: value, type: typeof (value) });\n return null;\n}\nexports.arrayify = arrayify;\nfunction concat(objects) {\n var arrays = [];\n var length = 0;\n for (var i = 0; i < objects.length; i++) {\n var object = arrayify(objects[i]);\n arrays.push(object);\n length += object.length;\n }\n var result = new Uint8Array(length);\n var offset = 0;\n for (var i = 0; i < arrays.length; i++) {\n result.set(arrays[i], offset);\n offset += arrays[i].length;\n }\n return addSlice(result);\n}\nexports.concat = concat;\nfunction stripZeros(value) {\n var result = arrayify(value);\n if (result.length === 0) {\n return result;\n }\n // Find the first non-zero entry\n var start = 0;\n while (result[start] === 0) {\n start++;\n }\n // If we started with zeros, strip them\n if (start) {\n result = result.slice(start);\n }\n return result;\n}\nexports.stripZeros = stripZeros;\nfunction padZeros(value, length) {\n value = arrayify(value);\n if (length < value.length) {\n throw new Error('cannot pad');\n }\n var result = new Uint8Array(length);\n result.set(value, length - value.length);\n return addSlice(result);\n}\nexports.padZeros = padZeros;\nfunction isHexString(value, length) {\n if (typeof (value) !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n if (length && value.length !== 2 + 2 * length) {\n return false;\n }\n return true;\n}\nexports.isHexString = isHexString;\nvar HexCharacters = '0123456789abcdef';\n// @TODO: Do not use any here\nfunction hexlify(value) {\n if (isBigNumber(value)) {\n return value.toHexString();\n }\n if (typeof (value) === 'number') {\n if (value < 0) {\n errors.throwError('cannot hexlify negative value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n var hex = '';\n while (value) {\n hex = HexCharacters[value & 0x0f] + hex;\n value = Math.trunc(value / 16);\n }\n if (hex.length) {\n if (hex.length % 2) {\n hex = '0' + hex;\n }\n return '0x' + hex;\n }\n return '0x00';\n }\n if (typeof (value) === 'string') {\n var match = value.match(/^(0x)?[0-9a-fA-F]*$/);\n if (!match) {\n errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n if (match[1] !== '0x') {\n errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n if (value.length % 2) {\n value = '0x0' + value.substring(2);\n }\n return value;\n }\n if (isArrayish(value)) {\n var result = [];\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n result.push(HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]);\n }\n return '0x' + result.join('');\n }\n errors.throwError('invalid hexlify value', null, { arg: 'value', value: value });\n return 'never';\n}\nexports.hexlify = hexlify;\nfunction hexStripZeros(value) {\n if (!isHexString(value)) {\n errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n while (value.length > 3 && value.substring(0, 3) === '0x0') {\n value = '0x' + value.substring(3);\n }\n return value;\n}\nexports.hexStripZeros = hexStripZeros;\nfunction hexZeroPad(value, length) {\n if (!isHexString(value)) {\n errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n while (value.length < 2 * length + 2) {\n value = '0x0' + value.substring(2);\n }\n return value;\n}\nexports.hexZeroPad = hexZeroPad;\n/* @TODO: Add something like this to make slicing code easier to understand\nfunction hexSlice(hex, start, end) {\n hex = hexlify(hex);\n return '0x' + hex.substring(2 + start * 2, 2 + end * 2);\n}\n*/\nfunction splitSignature(signature) {\n var bytes = arrayify(signature);\n if (bytes.length !== 65) {\n throw new Error('invalid signature');\n }\n var v = bytes[64];\n if (v !== 27 && v !== 28) {\n v = 27 + (v % 2);\n }\n return {\n r: hexlify(bytes.slice(0, 32)),\n s: hexlify(bytes.slice(32, 64)),\n v: v\n };\n}\nexports.splitSignature = splitSignature;\n\n},{\"./errors\":57}],57:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Unknown Error\nexports.UNKNOWN_ERROR = 'UNKNOWN_ERROR';\n// Not implemented\nexports.NOT_IMPLEMENTED = 'NOT_IMPLEMENTED';\n// Missing new operator to an object\n// - name: The name of the class\nexports.MISSING_NEW = 'MISSING_NEW';\n// Call exception\nexports.CALL_EXCEPTION = 'CALL_EXCEPTION';\n// Response from a server was invalid\n// - response: The body of the response\n//'BAD_RESPONSE',\n// Invalid argument (e.g. type) to a function:\n// - arg: The argument name that was invalid\n// - value: The value of the argument\n// - type: The type of the argument\n// - expected: What was expected\nexports.INVALID_ARGUMENT = 'INVALID_ARGUMENT';\n// Missing argument to a function:\n// - arg: The argument name that is required\n// - count: The number of arguments received\n// - expectedCount: The number of arguments expected\nexports.MISSING_ARGUMENT = 'MISSING_ARGUMENT';\n// Too many arguments\n// - count: The number of arguments received\n// - expectedCount: The number of arguments expected\nexports.UNEXPECTED_ARGUMENT = 'UNEXPECTED_ARGUMENT';\n// Numeric Fault\n// - operation: the operation being executed\n// - fault: the reason this faulted\nexports.NUMERIC_FAULT = 'NUMERIC_FAULT';\n// Unsupported operation\n// - operation\nexports.UNSUPPORTED_OPERATION = 'UNSUPPORTED_OPERATION';\n// @TODO: Enum\nfunction throwError(message, code, params) {\n if (!code) {\n code = exports.UNKNOWN_ERROR;\n }\n if (!params) {\n params = {};\n }\n var messageDetails = [];\n Object.keys(params).forEach(function (key) {\n try {\n messageDetails.push(key + '=' + JSON.stringify(params[key]));\n }\n catch (error) {\n messageDetails.push(key + '=' + JSON.stringify(params[key].toString()));\n }\n });\n var reason = message;\n if (messageDetails.length) {\n message += ' (' + messageDetails.join(', ') + ')';\n }\n // @TODO: Any??\n var error = new Error(message);\n error.reason = reason;\n error.code = code;\n Object.keys(params).forEach(function (key) {\n error[key] = params[key];\n });\n throw error;\n}\nexports.throwError = throwError;\nfunction checkNew(self, kind) {\n if (!(self instanceof kind)) {\n throwError('missing new', exports.MISSING_NEW, { name: kind.name });\n }\n}\nexports.checkNew = checkNew;\n\n},{}],58:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar _hash = __importStar(require(\"hash.js\"));\nvar convert_1 = require(\"./convert\");\nvar _hmac = _hash['hmac'];\nvar _sha256 = _hash['sha256'];\nvar _sha512 = _hash['sha512'];\n// @TODO: Make this use create-hmac in node\nfunction createSha256Hmac(key) {\n if (!key['buffer']) {\n key = convert_1.arrayify(key);\n }\n return _hmac(_sha256, key);\n}\nexports.createSha256Hmac = createSha256Hmac;\nfunction createSha512Hmac(key) {\n if (!key['buffer']) {\n key = convert_1.arrayify(key);\n }\n return _hmac(_sha512, key);\n}\nexports.createSha512Hmac = createSha512Hmac;\n\n},{\"./convert\":56,\"hash.js\":20}],59:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar keccak256_1 = require(\"./keccak256\");\nvar utf8_1 = require(\"./utf8\");\nfunction id(text) {\n return keccak256_1.keccak256(utf8_1.toUtf8Bytes(text));\n}\nexports.id = id;\n\n},{\"./keccak256\":61,\"./utf8\":70}],60:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// This is SUPER useful, but adds 140kb (even zipped, adds 40kb)\n//var unorm = require('unorm');\nvar address_1 = require(\"./address\");\nvar abi_coder_1 = require(\"./abi-coder\");\nvar base64 = __importStar(require(\"./base64\"));\nvar bigNumber = __importStar(require(\"./bignumber\"));\nvar convert = __importStar(require(\"./convert\"));\nvar id_1 = require(\"./id\");\nvar keccak256_1 = require(\"./keccak256\");\nvar namehash_1 = require(\"./namehash\");\nvar sha2 = __importStar(require(\"./sha2\"));\nvar solidity = __importStar(require(\"./solidity\"));\nvar random_bytes_1 = require(\"./random-bytes\");\n//import properties = require('./properties');\nvar RLP = __importStar(require(\"./rlp\"));\nvar utf8 = __importStar(require(\"./utf8\"));\nvar units = __importStar(require(\"./units\"));\nvar web_1 = require(\"./web\");\nexports.default = {\n AbiCoder: abi_coder_1.AbiCoder,\n defaultAbiCoder: abi_coder_1.defaultAbiCoder,\n parseSignature: abi_coder_1.parseSignature,\n RLP: RLP,\n fetchJson: web_1.fetchJson,\n //defineProperty: properties.defineProperty,\n // NFKD (decomposed)\n //etherSymbol: '\\uD835\\uDF63',\n // NFKC (composed)\n etherSymbol: '\\u039e',\n arrayify: convert.arrayify,\n concat: convert.concat,\n padZeros: convert.padZeros,\n stripZeros: convert.stripZeros,\n base64: base64,\n bigNumberify: bigNumber.bigNumberify,\n BigNumber: bigNumber.BigNumber,\n hexlify: convert.hexlify,\n toUtf8Bytes: utf8.toUtf8Bytes,\n toUtf8String: utf8.toUtf8String,\n namehash: namehash_1.namehash,\n id: id_1.id,\n getAddress: address_1.getAddress,\n getContractAddress: address_1.getContractAddress,\n formatEther: units.formatEther,\n parseEther: units.parseEther,\n formatUnits: units.formatUnits,\n parseUnits: units.parseUnits,\n keccak256: keccak256_1.keccak256,\n sha256: sha2.sha256,\n randomBytes: random_bytes_1.randomBytes,\n solidityPack: solidity.pack,\n solidityKeccak256: solidity.keccak256,\n soliditySha256: solidity.sha256,\n splitSignature: convert.splitSignature,\n};\n\n},{\"./abi-coder\":53,\"./address\":54,\"./base64\":40,\"./bignumber\":55,\"./convert\":56,\"./id\":59,\"./keccak256\":61,\"./namehash\":62,\"./random-bytes\":65,\"./rlp\":66,\"./sha2\":67,\"./solidity\":68,\"./units\":69,\"./utf8\":70,\"./web\":71}],61:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar sha3 = require(\"js-sha3\");\nvar convert_1 = require(\"./convert\");\nfunction keccak256(data) {\n return '0x' + sha3.keccak_256(convert_1.arrayify(data));\n}\nexports.keccak256 = keccak256;\n\n},{\"./convert\":56,\"js-sha3\":34}],62:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar convert_1 = require(\"./convert\");\nvar utf8_1 = require(\"./utf8\");\nvar keccak256_1 = require(\"./keccak256\");\nvar Zeros = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\nvar Partition = new RegExp(\"^((.*)\\\\.)?([^.]+)$\");\nvar UseSTD3ASCIIRules = new RegExp(\"^[a-z0-9.-]*$\");\nfunction namehash(name) {\n name = name.toLowerCase();\n // Supporting the full UTF-8 space requires additional (and large)\n // libraries, so for now we simply do not support them.\n // It should be fairly easy in the future to support systems with\n // String.normalize, but that is future work.\n if (!name.match(UseSTD3ASCIIRules)) {\n throw new Error('contains invalid UseSTD3ASCIIRules characters');\n }\n var result = Zeros;\n while (name.length) {\n var partition = name.match(Partition);\n var label = utf8_1.toUtf8Bytes(partition[3]);\n result = keccak256_1.keccak256(convert_1.concat([result, keccak256_1.keccak256(label)]));\n name = partition[2] || '';\n }\n return convert_1.hexlify(result);\n}\nexports.namehash = namehash;\n\n},{\"./convert\":56,\"./keccak256\":61,\"./utf8\":70}],63:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar convert_1 = require(\"./convert\");\nfunction pbkdf2(password, salt, iterations, keylen, createHmac) {\n password = convert_1.arrayify(password);\n salt = convert_1.arrayify(salt);\n var hLen;\n var l = 1;\n var DK = new Uint8Array(keylen);\n var block1 = new Uint8Array(salt.length + 4);\n block1.set(salt);\n //salt.copy(block1, 0, 0, salt.length)\n var r;\n var T;\n for (var i = 1; i <= l; i++) {\n //block1.writeUInt32BE(i, salt.length)\n block1[salt.length] = (i >> 24) & 0xff;\n block1[salt.length + 1] = (i >> 16) & 0xff;\n block1[salt.length + 2] = (i >> 8) & 0xff;\n block1[salt.length + 3] = i & 0xff;\n var U = createHmac(password).update(block1).digest();\n if (!hLen) {\n hLen = U.length;\n T = new Uint8Array(hLen);\n l = Math.ceil(keylen / hLen);\n r = keylen - (l - 1) * hLen;\n }\n //U.copy(T, 0, 0, hLen)\n T.set(U);\n for (var j = 1; j < iterations; j++) {\n U = createHmac(password).update(U).digest();\n for (var k = 0; k < hLen; k++)\n T[k] ^= U[k];\n }\n var destPos = (i - 1) * hLen;\n var len = (i === l ? r : hLen);\n //T.copy(DK, destPos, 0, len)\n DK.set(convert_1.arrayify(T).slice(0, len), destPos);\n }\n return convert_1.arrayify(DK);\n}\nexports.pbkdf2 = pbkdf2;\n\n},{\"./convert\":56}],64:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\nexports.defineReadOnly = defineReadOnly;\nfunction defineFrozen(object, name, value) {\n var frozen = JSON.stringify(value);\n Object.defineProperty(object, name, {\n enumerable: true,\n get: function () { return JSON.parse(frozen); }\n });\n}\nexports.defineFrozen = defineFrozen;\nfunction defineDeferredReadOnly(object, name, value) {\n var _value = value;\n var setter = function (value) {\n _value = value;\n };\n Object.defineProperty(object, name, {\n enumerable: true,\n get: function () { return _value; },\n set: setter\n });\n return setter;\n}\nexports.defineDeferredReadOnly = defineDeferredReadOnly;\nfunction resolveProperties(object) {\n var result = {};\n var promises = [];\n Object.keys(object).forEach(function (key) {\n var value = object[key];\n if (value instanceof Promise) {\n promises.push(value.then(function (value) { result[key] = value; }));\n }\n else {\n result[key] = value;\n }\n });\n return Promise.all(promises).then(function () {\n return object;\n });\n}\nexports.resolveProperties = resolveProperties;\n\n},{}],65:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar convert_1 = require(\"./convert\");\n//import * as crypto from 'crypto';\n//@TODO: Figure out how to fix crypto\nfunction getRandomValues(buffer) {\n for (var round = 0; round < 20; round++) {\n for (var i = 0; i < buffer.length; i++) {\n if (round) {\n buffer[i] ^= Math.trunc(256 * Math.random());\n }\n else {\n buffer[i] = Math.trunc(256 * Math.random());\n }\n }\n }\n return buffer;\n}\nfunction randomBytes(length) {\n if (length <= 0 || length > 1024 || parseInt(length) != length) {\n throw new Error('invalid length');\n }\n var result = new Uint8Array(length);\n getRandomValues(result);\n return convert_1.arrayify(result);\n}\nexports.randomBytes = randomBytes;\n;\n\n},{\"./convert\":56}],66:[function(require,module,exports){\n\"use strict\";\n//See: https://github.com/ethereum/wiki/wiki/RLP\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar convert_1 = require(\"./convert\");\nfunction arrayifyInteger(value) {\n var result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\nfunction unarrayifyInteger(data, offset, length) {\n var result = 0;\n for (var i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\nfunction _encode(object) {\n if (Array.isArray(object)) {\n var payload = [];\n object.forEach(function (child) {\n payload = payload.concat(_encode(child));\n });\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length);\n return payload;\n }\n var length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n return length.concat(payload);\n }\n else {\n var data = Array.prototype.slice.call(convert_1.arrayify(object));\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n }\n else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n var length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n return length.concat(data);\n }\n}\nfunction encode(object) {\n return convert_1.hexlify(_encode(object));\n}\nexports.encode = encode;\nfunction _decodeChildren(data, offset, childOffset, length) {\n var result = [];\n while (childOffset < offset + 1 + length) {\n var decoded = _decode(data, childOffset);\n result.push(decoded.result);\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n throw new Error('invalid rlp');\n }\n }\n return { consumed: (1 + length), result: result };\n}\n// returns { consumed: number, result: Object }\nfunction _decode(data, offset) {\n if (data.length === 0) {\n throw new Error('invalid rlp data');\n }\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n var lengthLength = data[offset] - 0xf7;\n if (offset + 1 + lengthLength > data.length) {\n throw new Error('too short');\n }\n var length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n throw new Error('to short');\n }\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n }\n else if (data[offset] >= 0xc0) {\n var length = data[offset] - 0xc0;\n if (offset + 1 + length > data.length) {\n throw new Error('invalid rlp data');\n }\n return _decodeChildren(data, offset, offset + 1, length);\n }\n else if (data[offset] >= 0xb8) {\n var lengthLength = data[offset] - 0xb7;\n if (offset + 1 + lengthLength > data.length) {\n throw new Error('invalid rlp data');\n }\n var length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n throw new Error('invalid rlp data');\n }\n var result = convert_1.hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result };\n }\n else if (data[offset] >= 0x80) {\n var length = data[offset] - 0x80;\n if (offset + 1 + length > data.length) {\n throw new Error('invlaid rlp data');\n }\n var result = convert_1.hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result };\n }\n return { consumed: 1, result: convert_1.hexlify(data[offset]) };\n}\nfunction decode(data) {\n var bytes = convert_1.arrayify(data);\n var decoded = _decode(bytes, 0);\n if (decoded.consumed !== bytes.length) {\n throw new Error('invalid rlp data');\n }\n return decoded.result;\n}\nexports.decode = decode;\n\n},{\"./convert\":56}],67:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar _hash = __importStar(require(\"hash.js\"));\nvar convert_1 = require(\"./convert\");\nvar _sha256 = _hash['sha256'];\nvar _sha512 = _hash['sha512'];\nfunction sha256(data) {\n return '0x' + (_sha256().update(convert_1.arrayify(data)).digest('hex'));\n}\nexports.sha256 = sha256;\nfunction sha512(data) {\n return '0x' + (_sha512().update(convert_1.arrayify(data)).digest('hex'));\n}\nexports.sha512 = sha512;\n\n},{\"./convert\":56,\"hash.js\":20}],68:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bignumber_1 = require(\"./bignumber\");\nvar convert_1 = require(\"./convert\");\nvar utf8_1 = require(\"./utf8\");\nvar keccak256_1 = require(\"./keccak256\");\nvar sha2_1 = require(\"./sha2\");\nvar regexBytes = new RegExp(\"^bytes([0-9]+)$\");\nvar regexNumber = new RegExp(\"^(u?int)([0-9]*)$\");\nvar regexArray = new RegExp(\"^(.*)\\\\[([0-9]*)\\\\]$\");\nvar Zeros = '0000000000000000000000000000000000000000000000000000000000000000';\nfunction _pack(type, value, isArray) {\n switch (type) {\n case 'address':\n if (isArray) {\n return convert_1.padZeros(value, 32);\n }\n return convert_1.arrayify(value);\n case 'string':\n return utf8_1.toUtf8Bytes(value);\n case 'bytes':\n return convert_1.arrayify(value);\n case 'bool':\n value = (value ? '0x01' : '0x00');\n if (isArray) {\n return convert_1.padZeros(value, 32);\n }\n return convert_1.arrayify(value);\n }\n var match = type.match(regexNumber);\n if (match) {\n //var signed = (match[1] === 'int')\n var size = parseInt(match[2] || \"256\");\n if ((size % 8 != 0) || size === 0 || size > 256) {\n throw new Error('invalid number type - ' + type);\n }\n if (isArray) {\n size = 256;\n }\n value = bignumber_1.bigNumberify(value).toTwos(size);\n return convert_1.padZeros(value, size / 8);\n }\n match = type.match(regexBytes);\n if (match) {\n var size = parseInt(match[1]);\n if (String(size) != match[1] || size === 0 || size > 32) {\n throw new Error('invalid number type - ' + type);\n }\n if (convert_1.arrayify(value).byteLength !== size) {\n throw new Error('invalid value for ' + type);\n }\n if (isArray) {\n return convert_1.arrayify((value + Zeros).substring(0, 66));\n }\n return value;\n }\n match = type.match(regexArray);\n if (match) {\n var baseType = match[1];\n var count = parseInt(match[2] || value.length);\n if (count != value.length) {\n throw new Error('invalid value for ' + type);\n }\n var result = [];\n value.forEach(function (value) {\n value = _pack(baseType, value, true);\n result.push(value);\n });\n return convert_1.concat(result);\n }\n throw new Error('unknown type - ' + type);\n}\n// @TODO: Array Enum\nfunction pack(types, values) {\n if (types.length != values.length) {\n throw new Error('type/value count mismatch');\n }\n var tight = [];\n types.forEach(function (type, index) {\n tight.push(_pack(type, values[index]));\n });\n return convert_1.hexlify(convert_1.concat(tight));\n}\nexports.pack = pack;\nfunction keccak256(types, values) {\n return keccak256_1.keccak256(pack(types, values));\n}\nexports.keccak256 = keccak256;\nfunction sha256(types, values) {\n return sha2_1.sha256(pack(types, values));\n}\nexports.sha256 = sha256;\n\n},{\"./bignumber\":55,\"./convert\":56,\"./keccak256\":61,\"./sha2\":67,\"./utf8\":70}],69:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bignumber_1 = require(\"./bignumber\");\nvar errors = __importStar(require(\"./errors\"));\nvar names = [\n 'wei',\n 'kwei',\n 'Mwei',\n 'Gwei',\n 'szabo',\n 'finny',\n 'ether',\n];\nvar getUnitInfo = (function () {\n var unitInfos = {};\n function getUnitInfo(value) {\n return {\n decimals: value.length - 1,\n tenPower: bignumber_1.bigNumberify(value)\n };\n }\n // Cache the common units\n var value = '1';\n names.forEach(function (name) {\n var info = getUnitInfo(value);\n unitInfos[name.toLowerCase()] = info;\n unitInfos[String(info.decimals)] = info;\n value += '000';\n });\n return function (name) {\n // Try the cache\n var info = unitInfos[String(name).toLowerCase()];\n if (!info && typeof (name) === 'number' && Math.trunc(name) == name && name >= 0 && name <= 256) {\n var value = '1';\n for (var i = 0; i < name; i++) {\n value += '0';\n }\n info = getUnitInfo(value);\n }\n // Make sure we got something\n if (!info) {\n errors.throwError('invalid unitType', errors.INVALID_ARGUMENT, { arg: 'name', value: name });\n }\n return info;\n };\n})();\nfunction formatUnits(value, unitType, options) {\n /*\n if (typeof(unitType) === 'object' && !options) {\n options = unitType;\n unitType = undefined;\n }\n if (unitType == null) { unitType = 18; }\n */\n if (!options) {\n options = {};\n }\n var unitInfo = getUnitInfo(unitType);\n // Make sure wei is a big number (convert as necessary)\n value = bignumber_1.bigNumberify(value);\n var negative = value.lt(bignumber_1.ConstantZero);\n if (negative) {\n value = value.mul(bignumber_1.ConstantNegativeOne);\n }\n var fraction = value.mod(unitInfo.tenPower).toString(10);\n while (fraction.length < unitInfo.decimals) {\n fraction = '0' + fraction;\n }\n // Strip off trailing zeros (but keep one if would otherwise be bare decimal point)\n if (!options.pad) {\n fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];\n }\n var whole = value.div(unitInfo.tenPower).toString(10);\n if (options.commify) {\n whole = whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n }\n value = whole + '.' + fraction;\n if (negative) {\n value = '-' + value;\n }\n return value;\n}\nexports.formatUnits = formatUnits;\nfunction parseUnits(value, unitType) {\n if (unitType == null) {\n unitType = 18;\n }\n var unitInfo = getUnitInfo(unitType);\n if (typeof (value) !== 'string' || !value.match(/^-?[0-9.,]+$/)) {\n errors.throwError('invalid decimal value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n // Remove commas\n var value = value.replace(/,/g, '');\n // Is it negative?\n var negative = (value.substring(0, 1) === '-');\n if (negative) {\n value = value.substring(1);\n }\n if (value === '.') {\n errors.throwError('missing value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n // Split it into a whole and fractional part\n var comps = value.split('.');\n if (comps.length > 2) {\n errors.throwError('too many decimal points', errors.INVALID_ARGUMENT, { arg: 'value', value: value });\n }\n var whole = comps[0], fraction = comps[1];\n if (!whole) {\n whole = '0';\n }\n if (!fraction) {\n fraction = '0';\n }\n // Prevent underflow\n if (fraction.length > unitInfo.decimals) {\n errors.throwError('underflow occurred', errors.NUMERIC_FAULT, { operation: 'division', fault: \"underflow\" });\n }\n // Fully pad the string with zeros to get to wei\n while (fraction.length < unitInfo.decimals) {\n fraction += '0';\n }\n whole = bignumber_1.bigNumberify(whole);\n fraction = bignumber_1.bigNumberify(fraction);\n var wei = (whole.mul(unitInfo.tenPower)).add(fraction);\n if (negative) {\n wei = wei.mul(bignumber_1.ConstantNegativeOne);\n }\n return wei;\n}\nexports.parseUnits = parseUnits;\nfunction formatEther(wei, options) {\n return formatUnits(wei, 18, options);\n}\nexports.formatEther = formatEther;\nfunction parseEther(ether) {\n return parseUnits(ether, 18);\n}\nexports.parseEther = parseEther;\n\n},{\"./bignumber\":55,\"./errors\":57}],70:[function(require,module,exports){\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar convert_1 = require(\"./convert\");\nvar UnicodeNormalizationForm;\n(function (UnicodeNormalizationForm) {\n UnicodeNormalizationForm[\"current\"] = \"\";\n UnicodeNormalizationForm[\"NFC\"] = \"NFC\";\n UnicodeNormalizationForm[\"NFD\"] = \"NFD\";\n UnicodeNormalizationForm[\"NFKC\"] = \"NFKC\";\n UnicodeNormalizationForm[\"NFKD\"] = \"NFKD\";\n})(UnicodeNormalizationForm = exports.UnicodeNormalizationForm || (exports.UnicodeNormalizationForm = {}));\n;\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\nfunction toUtf8Bytes(str, form) {\n if (form === void 0) { form = UnicodeNormalizationForm.current; }\n if (form != UnicodeNormalizationForm.current) {\n if (str.normalize) {\n str = str.normalize(form);\n }\n }\n var result = [];\n var offset = 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c < 128) {\n result[offset++] = c;\n }\n else if (c < 2048) {\n result[offset++] = (c >> 6) | 192;\n result[offset++] = (c & 63) | 128;\n }\n else if (((c & 0xFC00) == 0xD800) && (i + 1) < str.length && ((str.charCodeAt(i + 1) & 0xFC00) == 0xDC00)) {\n // Surrogate Pair\n c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);\n result[offset++] = (c >> 18) | 240;\n result[offset++] = ((c >> 12) & 63) | 128;\n result[offset++] = ((c >> 6) & 63) | 128;\n result[offset++] = (c & 63) | 128;\n }\n else {\n result[offset++] = (c >> 12) | 224;\n result[offset++] = ((c >> 6) & 63) | 128;\n result[offset++] = (c & 63) | 128;\n }\n }\n return convert_1.arrayify(result);\n}\nexports.toUtf8Bytes = toUtf8Bytes;\n;\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction toUtf8String(bytes) {\n bytes = convert_1.arrayify(bytes);\n var result = '';\n var i = 0;\n // Invalid bytes are ignored\n while (i < bytes.length) {\n var c = bytes[i++];\n if (c >> 7 == 0) {\n // 0xxx xxxx\n result += String.fromCharCode(c);\n continue;\n }\n // Invalid starting byte\n if (c >> 6 == 0x02) {\n continue;\n }\n // Multibyte; how many bytes left for thus character?\n var extraLength = null;\n if (c >> 5 == 0x06) {\n extraLength = 1;\n }\n else if (c >> 4 == 0x0e) {\n extraLength = 2;\n }\n else if (c >> 3 == 0x1e) {\n extraLength = 3;\n }\n else if (c >> 2 == 0x3e) {\n extraLength = 4;\n }\n else if (c >> 1 == 0x7e) {\n extraLength = 5;\n }\n else {\n continue;\n }\n // Do we have enough bytes in our data?\n if (i + extraLength > bytes.length) {\n // If there is an invalid unprocessed byte, try to continue\n for (; i < bytes.length; i++) {\n if (bytes[i] >> 6 != 0x02) {\n break;\n }\n }\n if (i != bytes.length)\n continue;\n // All leftover bytes are valid.\n return result;\n }\n // Remove the UTF-8 prefix from the char (res)\n var res = c & ((1 << (8 - extraLength - 1)) - 1);\n var count;\n for (count = 0; count < extraLength; count++) {\n var nextChar = bytes[i++];\n // Is the char valid multibyte part?\n if (nextChar >> 6 != 0x02) {\n break;\n }\n ;\n res = (res << 6) | (nextChar & 0x3f);\n }\n if (count != extraLength) {\n i--;\n continue;\n }\n if (res <= 0xffff) {\n result += String.fromCharCode(res);\n continue;\n }\n res -= 0x10000;\n result += String.fromCharCode(((res >> 10) & 0x3ff) + 0xd800, (res & 0x3ff) + 0xdc00);\n }\n return result;\n}\nexports.toUtf8String = toUtf8String;\n\n},{\"./convert\":56}],71:[function(require,module,exports){\n\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar xmlhttprequest_1 = require(\"xmlhttprequest\");\nvar utf8_1 = require(\"./utf8\");\nvar base64_1 = require(\"./base64\");\nvar errors = __importStar(require(\"./errors\"));\nfunction fetchJson(url, json, processFunc) {\n var headers = [];\n if (typeof (url) === 'object' && url.url != null) {\n if (url.url == null) {\n errors.throwError('missing URL', errors.MISSING_ARGUMENT, { arg: 'url' });\n }\n if (url.user != null && url.password != null) {\n if (url.url.substring(0, 6) !== 'https:' && url.allowInsecure !== true) {\n errors.throwError('basic authentication requires a secure https url', errors.INVALID_ARGUMENT, { arg: 'url', url: url.url, user: url.user, password: '[REDACTED]' });\n }\n var authorization = url.user + ':' + url.password;\n headers.push({\n key: 'Authorization',\n value: 'Basic ' + base64_1.encode(utf8_1.toUtf8Bytes(authorization))\n });\n }\n url = url.url;\n }\n return new Promise(function (resolve, reject) {\n var request = new xmlhttprequest_1.XMLHttpRequest();\n if (json) {\n request.open('POST', url, true);\n headers.push({ key: 'Content-Type', value: 'application/json' });\n }\n else {\n request.open('GET', url, true);\n }\n headers.forEach(function (header) {\n request.setRequestHeader(header.key, header.value);\n });\n request.onreadystatechange = function () {\n if (request.readyState !== 4) {\n return;\n }\n try {\n var result = JSON.parse(request.responseText);\n }\n catch (error) {\n // @TODO: not any!\n var jsonError = new Error('invalid json response');\n jsonError.orginialError = error;\n jsonError.responseText = request.responseText;\n jsonError.url = url;\n reject(jsonError);\n return;\n }\n if (processFunc) {\n try {\n result = processFunc(result);\n }\n catch (error) {\n error.url = url;\n error.body = json;\n error.responseText = request.responseText;\n reject(error);\n return;\n }\n }\n if (request.status != 200) {\n // @TODO: not any!\n var error = new Error('invalid response - ' + request.status);\n error.statusCode = request.statusCode;\n reject(error);\n return;\n }\n resolve(result);\n };\n request.onerror = function (error) {\n reject(error);\n };\n try {\n if (json) {\n request.send(json);\n }\n else {\n request.send();\n }\n }\n catch (error) {\n // @TODO: not any!\n var connectionError = new Error('connection error');\n connectionError.error = error;\n reject(connectionError);\n }\n });\n}\nexports.fetchJson = fetchJson;\n\n},{\"./base64\":40,\"./errors\":57,\"./utf8\":70,\"xmlhttprequest\":41}],72:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// See: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\n// See: https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\nvar secp256k1 = __importStar(require(\"./secp256k1\"));\nvar words_1 = __importDefault(require(\"./words\"));\nvar wordlist = words_1.default.replace(/([A-Z])/g, ' $1').toLowerCase().substring(1).split(' ');\nvar convert_1 = require(\"../utils/convert\");\nvar bignumber_1 = require(\"../utils/bignumber\");\nvar utf8_1 = require(\"../utils/utf8\");\nvar pbkdf2_1 = require(\"../utils/pbkdf2\");\nvar hmac_1 = require(\"../utils/hmac\");\nvar sha2_1 = require(\"../utils/sha2\");\nvar errors = __importStar(require(\"../utils/errors\"));\n// \"Bitcoin seed\"\nvar MasterSecret = utf8_1.toUtf8Bytes('Bitcoin seed');\nvar HardenedBit = 0x80000000;\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits) {\n return ((1 << bits) - 1) << (8 - bits);\n}\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits) {\n return (1 << bits) - 1;\n}\nvar HDNode = /** @class */ (function () {\n // @TODO: Private constructor?\n function HDNode(keyPair, chainCode, index, depth, mnemonic, path) {\n errors.checkNew(this, HDNode);\n this.keyPair = keyPair;\n this.privateKey = convert_1.hexlify(keyPair.priv.toArray('be', 32));\n this.publicKey = '0x' + keyPair.getPublic(true, 'hex');\n this.chainCode = convert_1.hexlify(chainCode);\n this.index = index;\n this.depth = depth;\n this.mnemonic = mnemonic;\n this.path = path;\n }\n HDNode.prototype._derive = function (index) {\n // Public parent key -> public child key\n if (!this.privateKey) {\n if (index >= HardenedBit) {\n throw new Error('cannot derive child of neutered node');\n }\n throw new Error('not implemented');\n }\n var data = new Uint8Array(37);\n // Base path\n var mnemonic = this.mnemonic;\n var path = this.path;\n if (path) {\n path += '/' + index;\n }\n if (index & HardenedBit) {\n // Data = 0x00 || ser_256(k_par)\n data.set(convert_1.arrayify(this.privateKey), 1);\n // Hardened path\n if (path) {\n path += \"'\";\n }\n }\n else {\n // Data = ser_p(point(k_par))\n data.set(this.keyPair.getPublic().encode(null, true));\n }\n // Data += ser_32(i)\n for (var i = 24; i >= 0; i -= 8) {\n data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);\n }\n var I = convert_1.arrayify(hmac_1.createSha512Hmac(this.chainCode).update(data).digest());\n var IL = bignumber_1.bigNumberify(I.slice(0, 32));\n var IR = I.slice(32);\n var ki = IL.add('0x' + this.keyPair.getPrivate('hex')).mod('0x' + secp256k1.curve.n.toString(16));\n return new HDNode(secp256k1.curve.keyFromPrivate(convert_1.arrayify(ki)), IR, index, this.depth + 1, mnemonic, path);\n };\n HDNode.prototype.derivePath = function (path) {\n var components = path.split('/');\n if (components.length === 0 || (components[0] === 'm' && this.depth !== 0)) {\n throw new Error('invalid path');\n }\n if (components[0] === 'm') {\n components.shift();\n }\n var result = this;\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n if (component.match(/^[0-9]+'$/)) {\n var index = parseInt(component.substring(0, component.length - 1));\n if (index >= HardenedBit) {\n throw new Error('invalid path index - ' + component);\n }\n result = result._derive(HardenedBit + index);\n }\n else if (component.match(/^[0-9]+$/)) {\n var index = parseInt(component);\n if (index >= HardenedBit) {\n throw new Error('invalid path index - ' + component);\n }\n result = result._derive(index);\n }\n else {\n throw new Error('invlaid path component - ' + component);\n }\n }\n return result;\n };\n return HDNode;\n}());\nexports.HDNode = HDNode;\nfunction _fromSeed(seed, mnemonic) {\n seed = convert_1.arrayify(seed);\n if (seed.length < 16 || seed.length > 64) {\n throw new Error('invalid seed');\n }\n var I = convert_1.arrayify(hmac_1.createSha512Hmac(MasterSecret).update(seed).digest());\n return new HDNode(secp256k1.curve.keyFromPrivate(I.slice(0, 32)), I.slice(32), 0, 0, mnemonic, 'm');\n}\nfunction fromMnemonic(mnemonic) {\n // Check that the checksum s valid (will throw an error)\n mnemonicToEntropy(mnemonic);\n return _fromSeed(mnemonicToSeed(mnemonic), mnemonic);\n}\nexports.fromMnemonic = fromMnemonic;\nfunction fromSeed(seed) {\n return _fromSeed(seed, null);\n}\nexports.fromSeed = fromSeed;\nfunction mnemonicToSeed(mnemonic, password) {\n if (!password) {\n password = '';\n }\n else if (password.normalize) {\n password = password.normalize('NFKD');\n }\n else {\n for (var i = 0; i < password.length; i++) {\n var c = password.charCodeAt(i);\n if (c < 32 || c > 127) {\n throw new Error('passwords with non-ASCII characters not supported in this environment');\n }\n }\n }\n var salt = utf8_1.toUtf8Bytes('mnemonic' + password, utf8_1.UnicodeNormalizationForm.NFKD);\n return convert_1.hexlify(pbkdf2_1.pbkdf2(utf8_1.toUtf8Bytes(mnemonic, utf8_1.UnicodeNormalizationForm.NFKD), salt, 2048, 64, hmac_1.createSha512Hmac));\n}\nexports.mnemonicToSeed = mnemonicToSeed;\nfunction mnemonicToEntropy(mnemonic) {\n var words = mnemonic.toLowerCase().split(' ');\n if ((words.length % 3) !== 0) {\n throw new Error('invalid mnemonic');\n }\n var entropy = convert_1.arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));\n var offset = 0;\n for (var i = 0; i < words.length; i++) {\n var index = wordlist.indexOf(words[i]);\n if (index === -1) {\n throw new Error('invalid mnemonic');\n }\n for (var bit = 0; bit < 11; bit++) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n }\n offset++;\n }\n }\n var entropyBits = 32 * words.length / 3;\n var checksumBits = words.length / 3;\n var checksumMask = getUpperMask(checksumBits);\n var checksum = convert_1.arrayify(sha2_1.sha256(entropy.slice(0, entropyBits / 8)))[0];\n checksum &= checksumMask;\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n throw new Error('invalid checksum');\n }\n return convert_1.hexlify(entropy.slice(0, entropyBits / 8));\n}\nexports.mnemonicToEntropy = mnemonicToEntropy;\nfunction entropyToMnemonic(entropy) {\n entropy = convert_1.arrayify(entropy);\n if ((entropy.length % 4) !== 0 || entropy.length < 16 || entropy.length > 32) {\n throw new Error('invalid entropy');\n }\n var words = [0];\n var remainingBits = 11;\n for (var i = 0; i < entropy.length; i++) {\n // Consume the whole byte (with still more to go)\n if (remainingBits > 8) {\n words[words.length - 1] <<= 8;\n words[words.length - 1] |= entropy[i];\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n }\n else {\n words[words.length - 1] <<= remainingBits;\n words[words.length - 1] |= entropy[i] >> (8 - remainingBits);\n // Start the next word\n words.push(entropy[i] & getLowerMask(8 - remainingBits));\n remainingBits += 3;\n }\n }\n // Compute the checksum bits\n var checksum = convert_1.arrayify(sha2_1.sha256(entropy))[0];\n var checksumBits = entropy.length / 4;\n checksum &= getUpperMask(checksumBits);\n // Shift the checksum into the word indices\n words[words.length - 1] <<= checksumBits;\n words[words.length - 1] |= (checksum >> (8 - checksumBits));\n // Convert indices into words\n var result = [];\n for (var i = 0; i < words.length; i++) {\n result.push(wordlist[words[i]]);\n }\n return result.join(' ');\n}\nexports.entropyToMnemonic = entropyToMnemonic;\nfunction isValidMnemonic(mnemonic) {\n try {\n mnemonicToEntropy(mnemonic);\n return true;\n }\n catch (error) { }\n return false;\n}\nexports.isValidMnemonic = isValidMnemonic;\n\n},{\"../utils/bignumber\":55,\"../utils/convert\":56,\"../utils/errors\":57,\"../utils/hmac\":58,\"../utils/pbkdf2\":63,\"../utils/sha2\":67,\"../utils/utf8\":70,\"./secp256k1\":74,\"./words\":78}],73:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar wallet_1 = require(\"./wallet\");\nexports.Wallet = wallet_1.Wallet;\nvar HDNode = __importStar(require(\"./hdnode\"));\nexports.HDNode = HDNode;\nvar signing_key_1 = require(\"./signing-key\");\nexports.SigningKey = signing_key_1.SigningKey;\n\n},{\"./hdnode\":72,\"./signing-key\":76,\"./wallet\":77}],74:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar elliptic = __importStar(require(\"elliptic\"));\nexports.curve = new elliptic.ec('secp256k1');\n\n},{\"elliptic\":5}],75:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar aes = require(\"aes-js\");\nvar scrypt = require(\"scrypt-js\");\nvar uuid = require(\"uuid\");\nvar address_1 = require(\"../utils/address\");\nvar convert_1 = require(\"../utils/convert\");\nvar hmac = __importStar(require(\"../utils/hmac\"));\nvar pbkdf2_1 = require(\"../utils/pbkdf2\");\nvar keccak256_1 = require(\"../utils/keccak256\");\nvar utf8_1 = require(\"../utils/utf8\");\nvar random_bytes_1 = require(\"../utils/random-bytes\");\nvar signing_key_1 = require(\"./signing-key\");\nvar HDNode = __importStar(require(\"./hdnode\"));\n// @TODO: Maybe move this to HDNode?\nvar defaultPath = \"m/44'/60'/0'/0/0\";\nfunction looseArrayify(hexString) {\n if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\n hexString = '0x' + hexString;\n }\n return convert_1.arrayify(hexString);\n}\nfunction zpad(value, length) {\n value = String(value);\n while (value.length < length) {\n value = '0' + value;\n }\n return value;\n}\nfunction getPassword(password) {\n if (typeof (password) === 'string') {\n return utf8_1.toUtf8Bytes(password, utf8_1.UnicodeNormalizationForm.NFKC);\n }\n return convert_1.arrayify(password);\n}\n// Search an Object and its children recursively, caselessly.\nfunction searchPath(object, path) {\n var currentChild = object;\n var comps = path.toLowerCase().split('/');\n for (var i = 0; i < comps.length; i++) {\n // Search for a child object with a case-insensitive matching key\n var matchingChild = null;\n for (var key in currentChild) {\n if (key.toLowerCase() === comps[i]) {\n matchingChild = currentChild[key];\n break;\n }\n }\n // Didn't find one. :'(\n if (matchingChild === null) {\n return null;\n }\n // Now check this child...\n currentChild = matchingChild;\n }\n return currentChild;\n}\nfunction isCrowdsaleWallet(json) {\n try {\n var data = JSON.parse(json);\n }\n catch (error) {\n return false;\n }\n return (data.encseed && data.ethaddr);\n}\nexports.isCrowdsaleWallet = isCrowdsaleWallet;\nfunction isValidWallet(json) {\n try {\n var data = JSON.parse(json);\n }\n catch (error) {\n return false;\n }\n if (!data.version || parseInt(data.version) !== data.version || parseInt(data.version) !== 3) {\n return false;\n }\n // @TODO: Put more checks to make sure it has kdf, iv and all that good stuff\n return true;\n}\nexports.isValidWallet = isValidWallet;\n// @TODO: Make a type for string or arrayish\n// See: https://github.com/ethereum/pyethsaletool\nfunction decryptCrowdsale(json, password) {\n var data = JSON.parse(json);\n password = getPassword(password);\n // Ethereum Address\n var ethaddr = address_1.getAddress(searchPath(data, 'ethaddr'));\n // Encrypted Seed\n var encseed = looseArrayify(searchPath(data, 'encseed'));\n if (!encseed || (encseed.length % 16) !== 0) {\n throw new Error('invalid encseed');\n }\n var key = pbkdf2_1.pbkdf2(password, password, 2000, 32, hmac.createSha256Hmac).slice(0, 16);\n var iv = encseed.slice(0, 16);\n var encryptedSeed = encseed.slice(16);\n // Decrypt the seed\n var aesCbc = new aes.ModeOfOperation.cbc(key, iv);\n var seed = convert_1.arrayify(aesCbc.decrypt(encryptedSeed));\n seed = aes.padding.pkcs7.strip(seed);\n // This wallet format is weird... Convert the binary encoded hex to a string.\n var seedHex = '';\n for (var i = 0; i < seed.length; i++) {\n seedHex += String.fromCharCode(seed[i]);\n }\n var seedHexBytes = utf8_1.toUtf8Bytes(seedHex);\n var signingKey = new signing_key_1.SigningKey(keccak256_1.keccak256(seedHexBytes));\n if (signingKey.address !== ethaddr) {\n throw new Error('corrupt crowdsale wallet');\n }\n return signingKey;\n}\nexports.decryptCrowdsale = decryptCrowdsale;\n//@TODO: string or arrayish\nfunction decrypt(json, password, progressCallback) {\n var data = JSON.parse(json);\n password = getPassword(password);\n var decrypt = function (key, ciphertext) {\n var cipher = searchPath(data, 'crypto/cipher');\n if (cipher === 'aes-128-ctr') {\n var iv = looseArrayify(searchPath(data, 'crypto/cipherparams/iv'));\n var counter = new aes.Counter(iv);\n var aesCtr = new aes.ModeOfOperation.ctr(key, counter);\n return convert_1.arrayify(aesCtr.decrypt(ciphertext));\n }\n return null;\n };\n var computeMAC = function (derivedHalf, ciphertext) {\n return keccak256_1.keccak256(convert_1.concat([derivedHalf, ciphertext]));\n };\n var getSigningKey = function (key, reject) {\n var ciphertext = looseArrayify(searchPath(data, 'crypto/ciphertext'));\n var computedMAC = convert_1.hexlify(computeMAC(key.slice(16, 32), ciphertext)).substring(2);\n if (computedMAC !== searchPath(data, 'crypto/mac').toLowerCase()) {\n reject(new Error('invalid password'));\n return null;\n }\n var privateKey = decrypt(key.slice(0, 16), ciphertext);\n var mnemonicKey = key.slice(32, 64);\n if (!privateKey) {\n reject(new Error('unsupported cipher'));\n return null;\n }\n var signingKey = new signing_key_1.SigningKey(privateKey);\n if (signingKey.address !== address_1.getAddress(data.address)) {\n reject(new Error('address mismatch'));\n return null;\n }\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n if (searchPath(data, 'x-ethers/version') === '0.1') {\n var mnemonicCiphertext = looseArrayify(searchPath(data, 'x-ethers/mnemonicCiphertext'));\n var mnemonicIv = looseArrayify(searchPath(data, 'x-ethers/mnemonicCounter'));\n var mnemonicCounter = new aes.Counter(mnemonicIv);\n var mnemonicAesCtr = new aes.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\n var path = searchPath(data, 'x-ethers/path') || defaultPath;\n var entropy = convert_1.arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext));\n var mnemonic = HDNode.entropyToMnemonic(entropy);\n var node = HDNode.fromMnemonic(mnemonic).derivePath(path);\n if (node.privateKey != convert_1.hexlify(privateKey)) {\n reject(new Error('mnemonic mismatch'));\n return null;\n }\n signingKey = new signing_key_1.SigningKey(node);\n }\n return signingKey;\n };\n return new Promise(function (resolve, reject) {\n var kdf = searchPath(data, 'crypto/kdf');\n if (kdf && typeof (kdf) === 'string') {\n if (kdf.toLowerCase() === 'scrypt') {\n var salt = looseArrayify(searchPath(data, 'crypto/kdfparams/salt'));\n var N = parseInt(searchPath(data, 'crypto/kdfparams/n'));\n var r = parseInt(searchPath(data, 'crypto/kdfparams/r'));\n var p = parseInt(searchPath(data, 'crypto/kdfparams/p'));\n if (!N || !r || !p) {\n reject(new Error('unsupported key-derivation function parameters'));\n return;\n }\n // Make sure N is a power of 2\n if ((N & (N - 1)) !== 0) {\n reject(new Error('unsupported key-derivation function parameter value for N'));\n return;\n }\n var dkLen = parseInt(searchPath(data, 'crypto/kdfparams/dklen'));\n if (dkLen !== 32) {\n reject(new Error('unsupported key-derivation derived-key length'));\n return;\n }\n scrypt(password, salt, N, r, p, 64, function (error, progress, key) {\n if (error) {\n error.progress = progress;\n reject(error);\n }\n else if (key) {\n key = convert_1.arrayify(key);\n var signingKey = getSigningKey(key, reject);\n if (!signingKey) {\n return;\n }\n if (progressCallback) {\n progressCallback(1);\n }\n resolve(signingKey);\n }\n else if (progressCallback) {\n return progressCallback(progress);\n }\n });\n }\n else if (kdf.toLowerCase() === 'pbkdf2') {\n var salt = looseArrayify(searchPath(data, 'crypto/kdfparams/salt'));\n var prfFunc = null;\n var prf = searchPath(data, 'crypto/kdfparams/prf');\n if (prf === 'hmac-sha256') {\n prfFunc = hmac.createSha256Hmac;\n }\n else if (prf === 'hmac-sha512') {\n prfFunc = hmac.createSha512Hmac;\n }\n else {\n reject(new Error('unsupported prf'));\n return;\n }\n var c = parseInt(searchPath(data, 'crypto/kdfparams/c'));\n var dkLen = parseInt(searchPath(data, 'crypto/kdfparams/dklen'));\n if (dkLen !== 32) {\n reject(new Error('unsupported key-derivation derived-key length'));\n return;\n }\n var key = pbkdf2_1.pbkdf2(password, salt, c, dkLen, prfFunc);\n var signingKey = getSigningKey(key, reject);\n if (!signingKey) {\n return;\n }\n resolve(signingKey);\n }\n else {\n reject(new Error('unsupported key-derivation function'));\n }\n }\n else {\n reject(new Error('unsupported key-derivation function'));\n }\n });\n}\nexports.decrypt = decrypt;\n// @TOOD: Options\nfunction encrypt(privateKey, password, options, progressCallback) {\n // the options are optional, so adjust the call as needed\n if (typeof (options) === 'function' && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (!options) {\n options = {};\n }\n // Check the private key\n if (privateKey instanceof signing_key_1.SigningKey) {\n privateKey = privateKey.privateKey;\n }\n privateKey = convert_1.arrayify(privateKey);\n if (privateKey.length !== 32) {\n throw new Error('invalid private key');\n }\n password = getPassword(password);\n var entropy = options.entropy;\n if (options.mnemonic) {\n if (entropy) {\n if (HDNode.entropyToMnemonic(entropy) !== options.mnemonic) {\n throw new Error('entropy and mnemonic mismatch');\n }\n }\n else {\n entropy = HDNode.mnemonicToEntropy(options.mnemonic);\n }\n }\n if (entropy) {\n entropy = convert_1.arrayify(entropy);\n }\n var path = options.path;\n if (entropy && !path) {\n path = defaultPath;\n }\n var client = options.client;\n if (!client) {\n client = \"ethers.js\";\n }\n // Check/generate the salt\n var salt = options.salt;\n if (salt) {\n salt = convert_1.arrayify(salt);\n }\n else {\n salt = random_bytes_1.randomBytes(32);\n ;\n }\n // Override initialization vector\n var iv = null;\n if (options.iv) {\n iv = convert_1.arrayify(options.iv);\n if (iv.length !== 16) {\n throw new Error('invalid iv');\n }\n }\n else {\n iv = random_bytes_1.randomBytes(16);\n }\n // Override the uuid\n var uuidRandom = options.uuid;\n if (uuidRandom) {\n uuidRandom = convert_1.arrayify(uuidRandom);\n if (uuidRandom.length !== 16) {\n throw new Error('invalid uuid');\n }\n }\n else {\n uuidRandom = random_bytes_1.randomBytes(16);\n }\n // Override the scrypt password-based key derivation function parameters\n var N = (1 << 17), r = 8, p = 1;\n if (options.scrypt) {\n if (options.scrypt.N) {\n N = options.scrypt.N;\n }\n if (options.scrypt.r) {\n r = options.scrypt.r;\n }\n if (options.scrypt.p) {\n p = options.scrypt.p;\n }\n }\n return new Promise(function (resolve, reject) {\n // We take 64 bytes:\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n scrypt(password, salt, N, r, p, 64, function (error, progress, key) {\n if (error) {\n error.progress = progress;\n reject(error);\n }\n else if (key) {\n key = convert_1.arrayify(key);\n // This will be used to encrypt the wallet (as per Web3 secret storage)\n var derivedKey = key.slice(0, 16);\n var macPrefix = key.slice(16, 32);\n // This will be used to encrypt the mnemonic phrase (if any)\n var mnemonicKey = key.slice(32, 64);\n // Get the address for this private key\n var address = (new signing_key_1.SigningKey(privateKey)).address;\n // Encrypt the private key\n var counter = new aes.Counter(iv);\n var aesCtr = new aes.ModeOfOperation.ctr(derivedKey, counter);\n var ciphertext = convert_1.arrayify(aesCtr.encrypt(privateKey));\n // Compute the message authentication code, used to check the password\n var mac = keccak256_1.keccak256(convert_1.concat([macPrefix, ciphertext]));\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n var data = {\n address: address.substring(2).toLowerCase(),\n id: uuid.v4({ random: uuidRandom }),\n version: 3,\n Crypto: {\n cipher: 'aes-128-ctr',\n cipherparams: {\n iv: convert_1.hexlify(iv).substring(2),\n },\n ciphertext: convert_1.hexlify(ciphertext).substring(2),\n kdf: 'scrypt',\n kdfparams: {\n salt: convert_1.hexlify(salt).substring(2),\n n: N,\n dklen: 32,\n p: p,\n r: r\n },\n mac: mac.substring(2)\n }\n };\n // If we have a mnemonic, encrypt it into the JSON wallet\n if (entropy) {\n var mnemonicIv = random_bytes_1.randomBytes(16);\n var mnemonicCounter = new aes.Counter(mnemonicIv);\n var mnemonicAesCtr = new aes.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\n var mnemonicCiphertext = convert_1.arrayify(mnemonicAesCtr.encrypt(entropy));\n var now = new Date();\n var timestamp = (now.getUTCFullYear() + '-' +\n zpad(now.getUTCMonth() + 1, 2) + '-' +\n zpad(now.getUTCDate(), 2) + 'T' +\n zpad(now.getUTCHours(), 2) + '-' +\n zpad(now.getUTCMinutes(), 2) + '-' +\n zpad(now.getUTCSeconds(), 2) + '.0Z');\n data['x-ethers'] = {\n client: client,\n gethFilename: ('UTC--' + timestamp + '--' + data.address),\n mnemonicCounter: convert_1.hexlify(mnemonicIv).substring(2),\n mnemonicCiphertext: convert_1.hexlify(mnemonicCiphertext).substring(2),\n version: \"0.1\"\n };\n }\n if (progressCallback) {\n progressCallback(1);\n }\n resolve(JSON.stringify(data));\n }\n else if (progressCallback) {\n return progressCallback(progress);\n }\n });\n });\n}\nexports.encrypt = encrypt;\n\n},{\"../utils/address\":54,\"../utils/convert\":56,\"../utils/hmac\":58,\"../utils/keccak256\":61,\"../utils/pbkdf2\":63,\"../utils/random-bytes\":65,\"../utils/utf8\":70,\"./hdnode\":72,\"./signing-key\":76,\"aes-js\":1,\"scrypt-js\":37,\"uuid\":39}],76:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * SigningKey\n *\n *\n */\nvar secp256k1 = __importStar(require(\"./secp256k1\"));\nvar address_1 = require(\"../utils/address\");\nvar convert_1 = require(\"../utils/convert\");\nvar keccak256_1 = require(\"../utils/keccak256\");\nvar errors = require(\"../utils/errors\");\nvar SigningKey = /** @class */ (function () {\n function SigningKey(privateKey) {\n errors.checkNew(this, SigningKey);\n if (privateKey.privateKey) {\n this.mnemonic = privateKey.mnemonic;\n this.path = privateKey.path;\n privateKey = privateKey.privateKey;\n }\n try {\n privateKey = convert_1.arrayify(privateKey);\n if (privateKey.length !== 32) {\n errors.throwError('exactly 32 bytes required', errors.INVALID_ARGUMENT, { value: privateKey });\n }\n }\n catch (error) {\n var params = { arg: 'privateKey', reason: error.reason, value: '[REDACTED]' };\n if (error.value) {\n if (typeof (error.value.length) === 'number') {\n params.length = error.value.length;\n }\n params.type = typeof (error.value);\n }\n errors.throwError('invalid private key', error.code, params);\n }\n this.privateKey = convert_1.hexlify(privateKey);\n this.keyPair = secp256k1.curve.keyFromPrivate(privateKey);\n //utils.defineProperty(this, 'publicKey', '0x' + keyPair.getPublic(true, 'hex'))\n this.publicKey = '0x' + this.keyPair.getPublic(true, 'hex');\n this.address = SigningKey.publicKeyToAddress('0x' + this.keyPair.getPublic(false, 'hex'));\n }\n SigningKey.prototype.signDigest = function (digest) {\n var signature = this.keyPair.sign(convert_1.arrayify(digest), { canonical: true });\n return {\n recoveryParam: signature.recoveryParam,\n r: '0x' + signature.r.toString(16),\n s: '0x' + signature.s.toString(16)\n };\n };\n SigningKey.recover = function (digest, r, s, recoveryParam) {\n var signature = {\n r: convert_1.arrayify(r),\n s: convert_1.arrayify(s)\n };\n var publicKey = secp256k1.curve.recoverPubKey(convert_1.arrayify(digest), signature, recoveryParam);\n return SigningKey.publicKeyToAddress('0x' + publicKey.encode('hex', false));\n };\n SigningKey.getPublicKey = function (value, compressed) {\n value = convert_1.arrayify(value);\n compressed = !!compressed;\n if (value.length === 32) {\n var keyPair = secp256k1.curve.keyFromPrivate(value);\n return '0x' + keyPair.getPublic(compressed, 'hex');\n }\n else if (value.length === 33) {\n var keyPair = secp256k1.curve.keyFromPublic(value);\n return '0x' + keyPair.getPublic(compressed, 'hex');\n }\n else if (value.length === 65) {\n var keyPair = secp256k1.curve.keyFromPublic(value);\n return '0x' + keyPair.getPublic(compressed, 'hex');\n }\n throw new Error('invalid value');\n };\n SigningKey.publicKeyToAddress = function (publicKey) {\n publicKey = '0x' + SigningKey.getPublicKey(publicKey, false).slice(4);\n return address_1.getAddress('0x' + keccak256_1.keccak256(publicKey).substring(26));\n };\n return SigningKey;\n}());\nexports.SigningKey = SigningKey;\n\n},{\"../utils/address\":54,\"../utils/convert\":56,\"../utils/errors\":57,\"../utils/keccak256\":61,\"./secp256k1\":74}],77:[function(require,module,exports){\n'use strict';\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar scrypt_js_1 = __importDefault(require(\"scrypt-js\"));\nvar address_1 = require(\"../utils/address\");\nvar bignumber_1 = require(\"../utils/bignumber\");\nvar convert_1 = require(\"../utils/convert\");\nvar keccak256_1 = require(\"../utils/keccak256\");\nvar random_bytes_1 = require(\"../utils/random-bytes\");\nvar RLP = __importStar(require(\"../utils/rlp\"));\nvar utf8_1 = require(\"../utils/utf8\");\nvar errors = __importStar(require(\"../utils/errors\"));\nvar hdnode_1 = require(\"./hdnode\");\nvar secretStorage = __importStar(require(\"./secret-storage\"));\nvar signing_key_1 = require(\"./signing-key\");\n// This ensures we inject a setImmediate into the global space, which\n// dramatically improves the performance of the scrypt PBKDF.\nconsole.log(\"Fix this! Setimmediate\");\nvar defaultPath = \"m/44'/60'/0'/0/0\";\nvar transactionFields = [\n { name: 'nonce', maxLength: 32, },\n { name: 'gasPrice', maxLength: 32, },\n { name: 'gasLimit', maxLength: 32, },\n { name: 'to', length: 20, },\n { name: 'value', maxLength: 32, },\n { name: 'data' },\n];\n// @TODO: Bytes32 or SigningKey\nvar Wallet = /** @class */ (function () {\n function Wallet(privateKey, provider) {\n //private _provider;\n this.defaultGasLimit = 1500000;\n errors.checkNew(this, Wallet);\n // Make sure we have a valid signing key\n if (privateKey instanceof signing_key_1.SigningKey) {\n this.signingKey = privateKey;\n if (this.signingKey.mnemonic) {\n Object.defineProperty(this, 'mnemonic', {\n enumerable: true,\n value: this.signingKey.mnemonic,\n writable: false\n });\n //this.mnemonic = this.signingKey.mnemonic;\n this.path = this.signingKey.path;\n }\n }\n else {\n this.signingKey = new signing_key_1.SigningKey(privateKey);\n }\n this.privateKey = this.signingKey.privateKey;\n this.provider = provider;\n //this.address = this.signingKey.address;\n Object.defineProperty(this, 'address', {\n enumerable: true,\n value: this.signingKey.address,\n writable: false\n });\n }\n Wallet.prototype.sign = function (transaction) {\n var chainId = transaction.chainId;\n if (chainId == null && this.provider) {\n chainId = this.provider.chainId;\n }\n if (!chainId) {\n chainId = 0;\n }\n var raw = [];\n transactionFields.forEach(function (fieldInfo) {\n var value = transaction[fieldInfo.name] || ([]);\n value = convert_1.arrayify(convert_1.hexlify(value));\n // Fixed-width field\n if (fieldInfo.length && value.length !== fieldInfo.length && value.length > 0) {\n var error = new Error('invalid ' + fieldInfo.name);\n error.reason = 'wrong length';\n error.value = value;\n throw error;\n }\n // Variable-width (with a maximum)\n if (fieldInfo.maxLength) {\n value = convert_1.stripZeros(value);\n if (value.length > fieldInfo.maxLength) {\n var error = new Error('invalid ' + fieldInfo.name);\n error.reason = 'too long';\n error.value = value;\n throw error;\n }\n }\n raw.push(convert_1.hexlify(value));\n });\n if (chainId) {\n raw.push(convert_1.hexlify(chainId));\n raw.push('0x');\n raw.push('0x');\n }\n var digest = keccak256_1.keccak256(RLP.encode(raw));\n var signature = this.signingKey.signDigest(digest);\n var v = 27 + signature.recoveryParam;\n if (chainId) {\n raw.pop();\n raw.pop();\n raw.pop();\n v += chainId * 2 + 8;\n }\n raw.push(convert_1.hexlify(v));\n raw.push(signature.r);\n raw.push(signature.s);\n return RLP.encode(raw);\n };\n /*\n set provider(provider: Provider) {\n this._provider = provider;\n }\n \n get provider() {\n return this._provider;\n }\n */\n Wallet.parseTransaction = function (rawTransaction) {\n rawTransaction = convert_1.hexlify(rawTransaction);\n var signedTransaction = RLP.decode(rawTransaction);\n if (signedTransaction.length !== 9) {\n throw new Error('invalid transaction');\n }\n var raw = [];\n var transaction = {};\n transactionFields.forEach(function (fieldInfo, index) {\n transaction[fieldInfo.name] = signedTransaction[index];\n raw.push(signedTransaction[index]);\n });\n if (transaction.to) {\n if (transaction.to == '0x') {\n delete transaction.to;\n }\n else {\n transaction.to = address_1.getAddress(transaction.to);\n }\n }\n ['gasPrice', 'gasLimit', 'nonce', 'value'].forEach(function (name) {\n if (!transaction[name]) {\n return;\n }\n var value = bignumber_1.ConstantZero;\n if (transaction[name].length > 0) {\n value = bignumber_1.bigNumberify(transaction[name]);\n }\n transaction[name] = value;\n });\n transaction.nonce = transaction.nonce.toNumber();\n var v = convert_1.arrayify(signedTransaction[6]);\n var r = convert_1.arrayify(signedTransaction[7]);\n var s = convert_1.arrayify(signedTransaction[8]);\n if (v.length >= 1 && r.length >= 1 && r.length <= 32 && s.length >= 1 && s.length <= 32) {\n transaction.v = bignumber_1.bigNumberify(v).toNumber();\n transaction.r = signedTransaction[7];\n transaction.s = signedTransaction[8];\n var chainId = (transaction.v - 35) / 2;\n if (chainId < 0) {\n chainId = 0;\n }\n chainId = Math.trunc(chainId);\n transaction.chainId = chainId;\n var recoveryParam = transaction.v - 27;\n if (chainId) {\n raw.push(convert_1.hexlify(chainId));\n raw.push('0x');\n raw.push('0x');\n recoveryParam -= chainId * 2 + 8;\n }\n var digest = keccak256_1.keccak256(RLP.encode(raw));\n try {\n transaction.from = signing_key_1.SigningKey.recover(digest, r, s, recoveryParam);\n }\n catch (error) {\n console.log(error);\n }\n }\n return transaction;\n };\n Wallet.prototype.getAddress = function () {\n return Promise.resolve(this.address);\n };\n Wallet.prototype.getBalance = function (blockTag) {\n if (!this.provider) {\n throw new Error('missing provider');\n }\n return this.provider.getBalance(this.address, blockTag);\n };\n Wallet.prototype.getTransactionCount = function (blockTag) {\n if (!this.provider) {\n throw new Error('missing provider');\n }\n return this.provider.getTransactionCount(this.address, blockTag);\n };\n Wallet.prototype.estimateGas = function (transaction) {\n if (!this.provider) {\n throw new Error('missing provider');\n }\n var calculate = {};\n ['from', 'to', 'data', 'value'].forEach(function (key) {\n if (transaction[key] == null) {\n return;\n }\n calculate[key] = transaction[key];\n });\n if (transaction.from == null) {\n calculate.from = this.address;\n }\n return this.provider.estimateGas(calculate);\n };\n Wallet.prototype.sendTransaction = function (transaction) {\n if (!this.provider) {\n throw new Error('missing provider');\n }\n if (!transaction || typeof (transaction) !== 'object') {\n throw new Error('invalid transaction object');\n }\n var gasLimit = transaction.gasLimit;\n if (gasLimit == null) {\n gasLimit = this.defaultGasLimit;\n }\n var self = this;\n var gasPricePromise = null;\n if (transaction.gasPrice) {\n gasPricePromise = Promise.resolve(transaction.gasPrice);\n }\n else {\n gasPricePromise = this.provider.getGasPrice();\n }\n var noncePromise = null;\n if (transaction.nonce) {\n noncePromise = Promise.resolve(transaction.nonce);\n }\n else {\n noncePromise = this.provider.getTransactionCount(self.address, 'pending');\n }\n var chainId = this.provider.chainId;\n var toPromise = null;\n if (transaction.to) {\n toPromise = this.provider.resolveName(transaction.to);\n }\n else {\n toPromise = Promise.resolve(undefined);\n }\n var data = convert_1.hexlify(transaction.data || '0x');\n var value = bignumber_1.ConstantZero;\n return Promise.all([gasPricePromise, noncePromise, toPromise]).then(function (results) {\n var signedTransaction = self.sign({\n to: results[2],\n data: data,\n gasLimit: gasLimit,\n gasPrice: results[0],\n nonce: results[1],\n value: value,\n chainId: chainId\n });\n return self.provider.sendTransaction(signedTransaction).then(function (hash) {\n var transaction = Wallet.parseTransaction(signedTransaction);\n transaction.hash = hash;\n transaction.wait = function () {\n return self.provider.waitForTransaction(hash);\n };\n return transaction;\n });\n });\n };\n Wallet.prototype.send = function (addressOrName, amountWei, options) {\n if (!options) {\n options = {};\n }\n return this.sendTransaction({\n to: addressOrName,\n gasLimit: options.gasLimit,\n gasPrice: options.gasPrice,\n nonce: options.nonce,\n value: amountWei,\n });\n };\n Wallet.hashMessage = function (message) {\n var payload = convert_1.concat([\n utf8_1.toUtf8Bytes('\\x19Ethereum Signed Message:\\n'),\n utf8_1.toUtf8Bytes(String(message.length)),\n ((typeof (message) === 'string') ? utf8_1.toUtf8Bytes(message) : message)\n ]);\n return keccak256_1.keccak256(payload);\n };\n Wallet.prototype.signMessage = function (message) {\n var signingKey = new signing_key_1.SigningKey(this.privateKey);\n var sig = signingKey.signDigest(Wallet.hashMessage(message));\n return (convert_1.hexZeroPad(sig.r, 32) + convert_1.hexZeroPad(sig.s, 32).substring(2) + (sig.recoveryParam ? '1c' : '1b'));\n };\n Wallet.verifyMessage = function (message, signature) {\n signature = convert_1.hexlify(signature);\n if (signature.length != 132) {\n throw new Error('invalid signature');\n }\n var digest = Wallet.hashMessage(message);\n var recoveryParam = parseInt(signature.substring(130), 16);\n if (recoveryParam >= 27) {\n recoveryParam -= 27;\n }\n if (recoveryParam < 0) {\n throw new Error('invalid signature');\n }\n return signing_key_1.SigningKey.recover(digest, signature.substring(0, 66), '0x' + signature.substring(66, 130), recoveryParam);\n };\n Wallet.prototype.encrypt = function (password, options, progressCallback) {\n if (typeof (options) === 'function' && !progressCallback) {\n progressCallback = options;\n options = {};\n }\n if (progressCallback && typeof (progressCallback) !== 'function') {\n throw new Error('invalid callback');\n }\n if (!options) {\n options = {};\n }\n if (this.mnemonic) {\n // Make sure we don't accidentally bubble the mnemonic up the call-stack\n var safeOptions = {};\n for (var key in options) {\n safeOptions[key] = options[key];\n }\n options = safeOptions;\n // Set the mnemonic and path\n options.mnemonic = this.mnemonic;\n options.path = this.path;\n }\n return secretStorage.encrypt(this.privateKey, password, options, progressCallback);\n };\n Wallet.createRandom = function (options) {\n var entropy = random_bytes_1.randomBytes(16);\n if (!options) {\n options = {};\n }\n if (options.extraEntropy) {\n entropy = convert_1.arrayify(keccak256_1.keccak256(convert_1.concat([entropy, options.extraEntropy])).substring(0, 34));\n }\n var mnemonic = hdnode_1.entropyToMnemonic(entropy);\n return Wallet.fromMnemonic(mnemonic, options.path);\n };\n Wallet.isEncryptedWallet = function (json) {\n return (secretStorage.isValidWallet(json) || secretStorage.isCrowdsaleWallet(json));\n };\n Wallet.fromEncryptedWallet = function (json, password, progressCallback) {\n if (progressCallback && typeof (progressCallback) !== 'function') {\n throw new Error('invalid callback');\n }\n return new Promise(function (resolve, reject) {\n if (secretStorage.isCrowdsaleWallet(json)) {\n try {\n var privateKey = secretStorage.decryptCrowdsale(json, password);\n resolve(new Wallet(privateKey));\n }\n catch (error) {\n reject(error);\n }\n }\n else if (secretStorage.isValidWallet(json)) {\n secretStorage.decrypt(json, password, progressCallback).then(function (signingKey) {\n var wallet = new Wallet(signingKey);\n /*\n if (signingKey.mnemonic && signingKey.path) {\n wallet.mnemonic = signingKey.mnemonic;\n wallet.path = signingKey.path;\n }\n */\n resolve(wallet);\n }, function (error) {\n reject(error);\n });\n }\n else {\n reject('invalid wallet JSON');\n }\n });\n };\n Wallet.fromMnemonic = function (mnemonic, path) {\n if (!path) {\n path = defaultPath;\n }\n return new Wallet(hdnode_1.fromMnemonic(mnemonic).derivePath(path));\n };\n Wallet.fromBrainWallet = function (username, password, progressCallback) {\n if (progressCallback && typeof (progressCallback) !== 'function') {\n throw new Error('invalid callback');\n }\n if (typeof (username) === 'string') {\n username = utf8_1.toUtf8Bytes(username, utf8_1.UnicodeNormalizationForm.NFKC);\n }\n else {\n username = convert_1.arrayify(username);\n }\n if (typeof (password) === 'string') {\n password = utf8_1.toUtf8Bytes(password, utf8_1.UnicodeNormalizationForm.NFKC);\n }\n else {\n password = convert_1.arrayify(password);\n }\n return new Promise(function (resolve, reject) {\n scrypt_js_1.default(password, username, (1 << 18), 8, 1, 32, function (error, progress, key) {\n if (error) {\n reject(error);\n }\n else if (key) {\n resolve(new Wallet(convert_1.hexlify(key)));\n }\n else if (progressCallback) {\n return progressCallback(progress);\n }\n });\n });\n };\n return Wallet;\n}());\nexports.Wallet = Wallet;\n\n},{\"../utils/address\":54,\"../utils/bignumber\":55,\"../utils/convert\":56,\"../utils/errors\":57,\"../utils/keccak256\":61,\"../utils/random-bytes\":65,\"../utils/rlp\":66,\"../utils/utf8\":70,\"./hdnode\":72,\"./secret-storage\":75,\"./signing-key\":76,\"scrypt-js\":37}],78:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar words = \"AbandonAbilityAbleAboutAboveAbsentAbsorbAbstractAbsurdAbuseAccessAccidentAccountAccuseAchieveAcidAcousticAcquireAcrossActActionActorActressActualAdaptAddAddictAddressAdjustAdmitAdultAdvanceAdviceAerobicAffairAffordAfraidAgainAgeAgentAgreeAheadAimAirAirportAisleAlarmAlbumAlcoholAlertAlienAllAlleyAllowAlmostAloneAlphaAlreadyAlsoAlterAlwaysAmateurAmazingAmongAmountAmusedAnalystAnchorAncientAngerAngleAngryAnimalAnkleAnnounceAnnualAnotherAnswerAntennaAntiqueAnxietyAnyApartApologyAppearAppleApproveAprilArchArcticAreaArenaArgueArmArmedArmorArmyAroundArrangeArrestArriveArrowArtArtefactArtistArtworkAskAspectAssaultAssetAssistAssumeAsthmaAthleteAtomAttackAttendAttitudeAttractAuctionAuditAugustAuntAuthorAutoAutumnAverageAvocadoAvoidAwakeAwareAwayAwesomeAwfulAwkwardAxisBabyBachelorBaconBadgeBagBalanceBalconyBallBambooBananaBannerBarBarelyBargainBarrelBaseBasicBasketBattleBeachBeanBeautyBecauseBecomeBeefBeforeBeginBehaveBehindBelieveBelowBeltBenchBenefitBestBetrayBetterBetweenBeyondBicycleBidBikeBindBiologyBirdBirthBitterBlackBladeBlameBlanketBlastBleakBlessBlindBloodBlossomBlouseBlueBlurBlushBoardBoatBodyBoilBombBoneBonusBookBoostBorderBoringBorrowBossBottomBounceBoxBoyBracketBrainBrandBrassBraveBreadBreezeBrickBridgeBriefBrightBringBriskBroccoliBrokenBronzeBroomBrotherBrownBrushBubbleBuddyBudgetBuffaloBuildBulbBulkBulletBundleBunkerBurdenBurgerBurstBusBusinessBusyButterBuyerBuzzCabbageCabinCableCactusCageCakeCallCalmCameraCampCanCanalCancelCandyCannonCanoeCanvasCanyonCapableCapitalCaptainCarCarbonCardCargoCarpetCarryCartCaseCashCasinoCastleCasualCatCatalogCatchCategoryCattleCaughtCauseCautionCaveCeilingCeleryCementCensusCenturyCerealCertainChairChalkChampionChangeChaosChapterChargeChaseChatCheapCheckCheeseChefCherryChestChickenChiefChildChimneyChoiceChooseChronicChuckleChunkChurnCigarCinnamonCircleCitizenCityCivilClaimClapClarifyClawClayCleanClerkCleverClickClientCliffClimbClinicClipClockClogCloseClothCloudClownClubClumpClusterClutchCoachCoastCoconutCodeCoffeeCoilCoinCollectColorColumnCombineComeComfortComicCommonCompanyConcertConductConfirmCongressConnectConsiderControlConvinceCookCoolCopperCopyCoralCoreCornCorrectCostCottonCouchCountryCoupleCourseCousinCoverCoyoteCrackCradleCraftCramCraneCrashCraterCrawlCrazyCreamCreditCreekCrewCricketCrimeCrispCriticCropCrossCrouchCrowdCrucialCruelCruiseCrumbleCrunchCrushCryCrystalCubeCultureCupCupboardCuriousCurrentCurtainCurveCushionCustomCuteCycleDadDamageDampDanceDangerDaringDashDaughterDawnDayDealDebateDebrisDecadeDecemberDecideDeclineDecorateDecreaseDeerDefenseDefineDefyDegreeDelayDeliverDemandDemiseDenialDentistDenyDepartDependDepositDepthDeputyDeriveDescribeDesertDesignDeskDespairDestroyDetailDetectDevelopDeviceDevoteDiagramDialDiamondDiaryDiceDieselDietDifferDigitalDignityDilemmaDinnerDinosaurDirectDirtDisagreeDiscoverDiseaseDishDismissDisorderDisplayDistanceDivertDivideDivorceDizzyDoctorDocumentDogDollDolphinDomainDonateDonkeyDonorDoorDoseDoubleDoveDraftDragonDramaDrasticDrawDreamDressDriftDrillDrinkDripDriveDropDrumDryDuckDumbDuneDuringDustDutchDutyDwarfDynamicEagerEagleEarlyEarnEarthEasilyEastEasyEchoEcologyEconomyEdgeEditEducateEffortEggEightEitherElbowElderElectricElegantElementElephantElevatorEliteElseEmbarkEmbodyEmbraceEmergeEmotionEmployEmpowerEmptyEnableEnactEndEndlessEndorseEnemyEnergyEnforceEngageEngineEnhanceEnjoyEnlistEnoughEnrichEnrollEnsureEnterEntireEntryEnvelopeEpisodeEqualEquipEraEraseErodeErosionErrorEruptEscapeEssayEssenceEstateEternalEthicsEvidenceEvilEvokeEvolveExactExampleExcessExchangeExciteExcludeExcuseExecuteExerciseExhaustExhibitExileExistExitExoticExpandExpectExpireExplainExposeExpressExtendExtraEyeEyebrowFabricFaceFacultyFadeFaintFaithFallFalseFameFamilyFamousFanFancyFantasyFarmFashionFatFatalFatherFatigueFaultFavoriteFeatureFebruaryFederalFeeFeedFeelFemaleFenceFestivalFetchFeverFewFiberFictionFieldFigureFileFilmFilterFinalFindFineFingerFinishFireFirmFirstFiscalFishFitFitnessFixFlagFlameFlashFlatFlavorFleeFlightFlipFloatFlockFloorFlowerFluidFlushFlyFoamFocusFogFoilFoldFollowFoodFootForceForestForgetForkFortuneForumForwardFossilFosterFoundFoxFragileFrameFrequentFreshFriendFringeFrogFrontFrostFrownFrozenFruitFuelFunFunnyFurnaceFuryFutureGadgetGainGalaxyGalleryGameGapGarageGarbageGardenGarlicGarmentGasGaspGateGatherGaugeGazeGeneralGeniusGenreGentleGenuineGestureGhostGiantGiftGiggleGingerGiraffeGirlGiveGladGlanceGlareGlassGlideGlimpseGlobeGloomGloryGloveGlowGlueGoatGoddessGoldGoodGooseGorillaGospelGossipGovernGownGrabGraceGrainGrantGrapeGrassGravityGreatGreenGridGriefGritGroceryGroupGrowGruntGuardGuessGuideGuiltGuitarGunGymHabitHairHalfHammerHamsterHandHappyHarborHardHarshHarvestHatHaveHawkHazardHeadHealthHeartHeavyHedgehogHeightHelloHelmetHelpHenHeroHiddenHighHillHintHipHireHistoryHobbyHockeyHoldHoleHolidayHollowHomeHoneyHoodHopeHornHorrorHorseHospitalHostHotelHourHoverHubHugeHumanHumbleHumorHundredHungryHuntHurdleHurryHurtHusbandHybridIceIconIdeaIdentifyIdleIgnoreIllIllegalIllnessImageImitateImmenseImmuneImpactImposeImproveImpulseInchIncludeIncomeIncreaseIndexIndicateIndoorIndustryInfantInflictInformInhaleInheritInitialInjectInjuryInmateInnerInnocentInputInquiryInsaneInsectInsideInspireInstallIntactInterestIntoInvestInviteInvolveIronIslandIsolateIssueItemIvoryJacketJaguarJarJazzJealousJeansJellyJewelJobJoinJokeJourneyJoyJudgeJuiceJumpJungleJuniorJunkJustKangarooKeenKeepKetchupKeyKickKidKidneyKindKingdomKissKitKitchenKiteKittenKiwiKneeKnifeKnockKnowLabLabelLaborLadderLadyLakeLampLanguageLaptopLargeLaterLatinLaughLaundryLavaLawLawnLawsuitLayerLazyLeaderLeafLearnLeaveLectureLeftLegLegalLegendLeisureLemonLendLengthLensLeopardLessonLetterLevelLiarLibertyLibraryLicenseLifeLiftLightLikeLimbLimitLinkLionLiquidListLittleLiveLizardLoadLoanLobsterLocalLockLogicLonelyLongLoopLotteryLoudLoungeLoveLoyalLuckyLuggageLumberLunarLunchLuxuryLyricsMachineMadMagicMagnetMaidMailMainMajorMakeMammalManManageMandateMangoMansionManualMapleMarbleMarchMarginMarineMarketMarriageMaskMassMasterMatchMaterialMathMatrixMatterMaximumMazeMeadowMeanMeasureMeatMechanicMedalMediaMelodyMeltMemberMemoryMentionMenuMercyMergeMeritMerryMeshMessageMetalMethodMiddleMidnightMilkMillionMimicMindMinimumMinorMinuteMiracleMirrorMiseryMissMistakeMixMixedMixtureMobileModelModifyMomMomentMonitorMonkeyMonsterMonthMoonMoralMoreMorningMosquitoMotherMotionMotorMountainMouseMoveMovieMuchMuffinMuleMultiplyMuscleMuseumMushroomMusicMustMutualMyselfMysteryMythNaiveNameNapkinNarrowNastyNationNatureNearNeckNeedNegativeNeglectNeitherNephewNerveNestNetNetworkNeutralNeverNewsNextNiceNightNobleNoiseNomineeNoodleNormalNorthNoseNotableNoteNothingNoticeNovelNowNuclearNumberNurseNutOakObeyObjectObligeObscureObserveObtainObviousOccurOceanOctoberOdorOffOfferOfficeOftenOilOkayOldOliveOlympicOmitOnceOneOnionOnlineOnlyOpenOperaOpinionOpposeOptionOrangeOrbitOrchardOrderOrdinaryOrganOrientOriginalOrphanOstrichOtherOutdoorOuterOutputOutsideOvalOvenOverOwnOwnerOxygenOysterOzonePactPaddlePagePairPalacePalmPandaPanelPanicPantherPaperParadeParentParkParrotPartyPassPatchPathPatientPatrolPatternPausePavePaymentPeacePeanutPearPeasantPelicanPenPenaltyPencilPeoplePepperPerfectPermitPersonPetPhonePhotoPhrasePhysicalPianoPicnicPicturePiecePigPigeonPillPilotPinkPioneerPipePistolPitchPizzaPlacePlanetPlasticPlatePlayPleasePledgePluckPlugPlungePoemPoetPointPolarPolePolicePondPonyPoolPopularPortionPositionPossiblePostPotatoPotteryPovertyPowderPowerPracticePraisePredictPreferPreparePresentPrettyPreventPricePridePrimaryPrintPriorityPrisonPrivatePrizeProblemProcessProduceProfitProgramProjectPromoteProofPropertyProsperProtectProudProvidePublicPuddingPullPulpPulsePumpkinPunchPupilPuppyPurchasePurityPurposePursePushPutPuzzlePyramidQualityQuantumQuarterQuestionQuickQuitQuizQuoteRabbitRaccoonRaceRackRadarRadioRailRainRaiseRallyRampRanchRandomRangeRapidRareRateRatherRavenRawRazorReadyRealReasonRebelRebuildRecallReceiveRecipeRecordRecycleReduceReflectReformRefuseRegionRegretRegularRejectRelaxReleaseReliefRelyRemainRememberRemindRemoveRenderRenewRentReopenRepairRepeatReplaceReportRequireRescueResembleResistResourceResponseResultRetireRetreatReturnReunionRevealReviewRewardRhythmRibRibbonRiceRichRideRidgeRifleRightRigidRingRiotRippleRiskRitualRivalRiverRoadRoastRobotRobustRocketRomanceRoofRookieRoomRoseRotateRoughRoundRouteRoyalRubberRudeRugRuleRunRunwayRuralSadSaddleSadnessSafeSailSaladSalmonSalonSaltSaluteSameSampleSandSatisfySatoshiSauceSausageSaveSayScaleScanScareScatterSceneSchemeSchoolScienceScissorsScorpionScoutScrapScreenScriptScrubSeaSearchSeasonSeatSecondSecretSectionSecuritySeedSeekSegmentSelectSellSeminarSeniorSenseSentenceSeriesServiceSessionSettleSetupSevenShadowShaftShallowShareShedShellSheriffShieldShiftShineShipShiverShockShoeShootShopShortShoulderShoveShrimpShrugShuffleShySiblingSickSideSiegeSightSignSilentSilkSillySilverSimilarSimpleSinceSingSirenSisterSituateSixSizeSkateSketchSkiSkillSkinSkirtSkullSlabSlamSleepSlenderSliceSlideSlightSlimSloganSlotSlowSlushSmallSmartSmileSmokeSmoothSnackSnakeSnapSniffSnowSoapSoccerSocialSockSodaSoftSolarSoldierSolidSolutionSolveSomeoneSongSoonSorrySortSoulSoundSoupSourceSouthSpaceSpareSpatialSpawnSpeakSpecialSpeedSpellSpendSphereSpiceSpiderSpikeSpinSpiritSplitSpoilSponsorSpoonSportSpotSpraySpreadSpringSpySquareSqueezeSquirrelStableStadiumStaffStageStairsStampStandStartStateStaySteakSteelStemStepStereoStickStillStingStockStomachStoneStoolStoryStoveStrategyStreetStrikeStrongStruggleStudentStuffStumbleStyleSubjectSubmitSubwaySuccessSuchSuddenSufferSugarSuggestSuitSummerSunSunnySunsetSuperSupplySupremeSureSurfaceSurgeSurpriseSurroundSurveySuspectSustainSwallowSwampSwapSwarmSwearSweetSwiftSwimSwingSwitchSwordSymbolSymptomSyrupSystemTableTackleTagTailTalentTalkTankTapeTargetTaskTasteTattooTaxiTeachTeamTellTenTenantTennisTentTermTestTextThankThatThemeThenTheoryThereTheyThingThisThoughtThreeThriveThrowThumbThunderTicketTideTigerTiltTimberTimeTinyTipTiredTissueTitleToastTobaccoTodayToddlerToeTogetherToiletTokenTomatoTomorrowToneTongueTonightToolToothTopTopicToppleTorchTornadoTortoiseTossTotalTouristTowardTowerTownToyTrackTradeTrafficTragicTrainTransferTrapTrashTravelTrayTreatTreeTrendTrialTribeTrickTriggerTrimTripTrophyTroubleTruckTrueTrulyTrumpetTrustTruthTryTubeTuitionTumbleTunaTunnelTurkeyTurnTurtleTwelveTwentyTwiceTwinTwistTwoTypeTypicalUglyUmbrellaUnableUnawareUncleUncoverUnderUndoUnfairUnfoldUnhappyUniformUniqueUnitUniverseUnknownUnlockUntilUnusualUnveilUpdateUpgradeUpholdUponUpperUpsetUrbanUrgeUsageUseUsedUsefulUselessUsualUtilityVacantVacuumVagueValidValleyValveVanVanishVaporVariousVastVaultVehicleVelvetVendorVentureVenueVerbVerifyVersionVeryVesselVeteranViableVibrantViciousVictoryVideoViewVillageVintageViolinVirtualVirusVisaVisitVisualVitalVividVocalVoiceVoidVolcanoVolumeVoteVoyageWageWagonWaitWalkWallWalnutWantWarfareWarmWarriorWashWaspWasteWaterWaveWayWealthWeaponWearWeaselWeatherWebWeddingWeekendWeirdWelcomeWestWetWhaleWhatWheatWheelWhenWhereWhipWhisperWideWidthWifeWildWillWinWindowWineWingWinkWinnerWinterWireWisdomWiseWishWitnessWolfWomanWonderWoodWoolWordWorkWorldWorryWorthWrapWreckWrestleWristWriteWrongYardYearYellowYouYoungYouthZebraZeroZoneZoo\";\nexports.default = words;\n\n},{}],79:[function(require,module,exports){\n'use strict';\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result[\"default\"] = mod;\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar contracts_1 = require(\"./contracts\");\nexports.Contract = contracts_1.Contract;\nexports.Interface = contracts_1.Interface;\nvar providers = __importStar(require(\"./providers\"));\nexports.providers = providers;\nvar errors = __importStar(require(\"./utils/errors\"));\nexports.errors = errors;\nvar utils_1 = __importDefault(require(\"./utils\"));\nexports.utils = utils_1.default;\nvar wallet_1 = require(\"./wallet\");\nexports.HDNode = wallet_1.HDNode;\nexports.SigningKey = wallet_1.SigningKey;\nexports.Wallet = wallet_1.Wallet;\n\n},{\"./contracts\":43,\"./providers\":47,\"./utils\":60,\"./utils/errors\":57,\"./wallet\":73}]},{},[79])(79)\n});"]} |