@settlemint/solidity-zeto
Version:
Smart contract set to build Zero Knowledge tokens in SettleMint
1 lines • 123 kB
JSON
{"abi":[{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"__ZetoFungibleWithdraw_init","inputs":[{"name":"_depositVerifier","type":"address","internalType":"contract Groth16Verifier_CheckHashesValue"},{"name":"_withdrawVerifier","type":"address","internalType":"contract Groth16Verifier_CheckInputsOutputsValue"},{"name":"_batchWithdrawVerifier","type":"address","internalType":"contract Groth16Verifier_CheckInputsOutputsValueBatch"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"__ZetoFungible_init","inputs":[{"name":"_depositVerifier","type":"address","internalType":"contract Groth16Verifier_CheckHashesValue"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"_deposit","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"utxo","type":"uint256","internalType":"uint256"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"_withdraw","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"inputs","type":"uint256[]","internalType":"uint256[]"},{"name":"output","type":"uint256","internalType":"uint256"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deposit","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"utxo","type":"uint256","internalType":"uint256"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"_verifier","type":"address","internalType":"contract Groth16Verifier_Anon"},{"name":"_depositVerifier","type":"address","internalType":"contract Groth16Verifier_CheckHashesValue"},{"name":"_withdrawVerifier","type":"address","internalType":"contract Groth16Verifier_CheckInputsOutputsValue"},{"name":"_batchVerifier","type":"address","internalType":"contract Groth16Verifier_AnonBatch"},{"name":"_batchWithdrawVerifier","type":"address","internalType":"contract Groth16Verifier_CheckInputsOutputsValueBatch"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lockProof","inputs":[{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"delegate","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mint","inputs":[{"name":"utxos","type":"uint256[]","internalType":"uint256[]"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setERC20","inputs":[{"name":"_erc20","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"spent","inputs":[{"name":"txo","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"inputs","type":"uint256[]","internalType":"uint256[]"},{"name":"outputs","type":"uint256[]","internalType":"uint256[]"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdraw","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"inputs","type":"uint256[]","internalType":"uint256[]"},{"name":"output","type":"uint256","internalType":"uint256"},{"name":"proof","type":"tuple","internalType":"struct Commonlib.Proof","components":[{"name":"pA","type":"uint256[2]","internalType":"uint256[2]"},{"name":"pB","type":"uint256[2][2]","internalType":"uint256[2][2]"},{"name":"pC","type":"uint256[2]","internalType":"uint256[2]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UTXOMint","inputs":[{"name":"outputs","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"submitter","type":"address","indexed":true,"internalType":"address"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"UTXOTransfer","inputs":[{"name":"inputs","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"outputs","type":"uint256[]","indexed":false,"internalType":"uint256[]"},{"name":"submitter","type":"address","indexed":true,"internalType":"address"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"IdentityNotRegistered","inputs":[{"name":"addr","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"UTXOAlreadyOwned","inputs":[{"name":"utxo","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UTXOAlreadySpent","inputs":[{"name":"utxo","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UTXOArrayTooLarge","inputs":[{"name":"maxAllowed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UTXODuplicate","inputs":[{"name":"utxo","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UTXONotMinted","inputs":[{"name":"utxo","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"WithdrawArrayTooLarge","inputs":[{"name":"maxAllowed","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60a0806040523460295730608052612993908161002e823960805181818161069e01526116e30152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630107eb4a1461013457806312c0fed21461012f5780633e96e2731461012a5780634ad89929146101255780634f1ef2861461012057806352d1902d1461011b578063715018a614610116578063788c0456146101115780638bb2513b1461010c5780638da5cb5b146101075780639b2e8b52146101025780639fcc50af146100fd578063ad3cb1cc146100f8578063c29a6fda146100f3578063cc2a9a5b146100ee578063d5b5cc23146100e9578063f2fde38b146100e45763f756356a146100df575f80fd5b610db8565b610d8b565b610d23565b610a86565b610a29565b6109b3565b610956565b6108d4565b610882565b61081f565b6107c7565b610716565b610677565b6105fc565b6105c6565b6104bd565b61025b565b61015b565b73ffffffffffffffffffffffffffffffffffffffff81160361015757565b5f80fd5b346101575760606003193601126101575773ffffffffffffffffffffffffffffffffffffffff60043561018d81610139565b8160243561019a81610139565b81604435936101a885610139565b6101b0611bb5565b6101b8611bb5565b1673ffffffffffffffffffffffffffffffffffffffff1960025416176002551673ffffffffffffffffffffffffffffffffffffffff1960045416176004551673ffffffffffffffffffffffffffffffffffffffff1960055416176005555f80f35b60031961010091011261015757600490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61010091011261015757604490565b34610157576101206003193601126101575761027636610219565b61028c610104359161028783610139565b611c38565b90815f525f60205273ffffffffffffffffffffffffffffffffffffffff60405f20541615801561038b575b15610307576102d0610305925f525f60205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff19825416179055565b005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f6f6620616c7265616479206c6f636b656420627920616e6f746865722060448201527f70617274790000000000000000000000000000000000000000000000000000006064820152fd5b50815f525f60205273ffffffffffffffffffffffffffffffffffffffff60405f20541633146102b7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff82111761040557604052565b6103b5565b9061041860405192836103e2565b565b67ffffffffffffffff81116104055760051b60200190565b9080601f830112156101575781356104498161041a565b9261045760405194856103e2565b81845260208085019260051b82010192831161015757602001905b82821061047f5750505090565b8135815260209182019101610472565b9181601f840112156101575782359167ffffffffffffffff8311610157576020838186019501011161015757565b34610157576101606003193601126101575760043567ffffffffffffffff8111610157576104ef903690600401610432565b60243567ffffffffffffffff81116101575761050f903690600401610432565b906105193661022b565b91610144359167ffffffffffffffff83116101575761055d9361054361054b94369060040161048f565b9390926110fd565b60405190151581529081906020820190565b0390f35b90610160600319830112610157576004359160243567ffffffffffffffff8111610157578161059291600401610432565b916101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c60443593011261015757606490565b34610157576103056105d736610561565b92919091611476565b67ffffffffffffffff811161040557601f01601f191660200190565b60406003193601126101575760043561061481610139565b6024359067ffffffffffffffff8211610157573660238301121561015757816004013590610641826105e0565b9161064f60405193846103e2565b8083523660248286010111610157576020815f926024610305970183870137840101526116ca565b34610157575f6003193601126101575773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036106ee5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610157575f6003193601126101575761072e6123ce565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610157576107d536610561565b6107e2839492935161103e565b9081511561081a576108008261030596866020610815960152611cce565b9490809461080f848884611e44565b50611476565b61225e565b610e94565b346101575760406003193601126101575760043567ffffffffffffffff811161015757610850903690600401610432565b6024359067ffffffffffffffff82116101575761087461030592369060040161048f565b9161087d6123ce565b61245f565b34610157575f60031936011261015757602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461015757610160600319360112610157576024356004356108f53661022b565b906101443567ffffffffffffffff811161015757839261091c61092492369060040161048f565b949093611aac565b604080519061093381836103e2565b60018252601f190136602083013780511561081a5761030593602082015261245f565b346101575760206003193601126101575773ffffffffffffffffffffffffffffffffffffffff60043561098881610139565b610990611bb5565b1673ffffffffffffffffffffffffffffffffffffffff1960025416176002555f80f35b34610157575f6003193601126101575760408051906109d281836103e2565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b346101575760206003193601126101575773ffffffffffffffffffffffffffffffffffffffff600435610a5b81610139565b610a636123ce565b1673ffffffffffffffffffffffffffffffffffffffff1960035416176003555f80f35b346101575760c060031936011261015757600435610aa381610139565b60243590610ab082610139565b604435610abc81610139565b606435610ac881610139565b60843590610ad582610139565b60a43592610ae284610139565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549567ffffffffffffffff610b2860ff60408a901c16159867ffffffffffffffff1690565b1680159081610d1b575b6001149081610d11575b159081610d08575b50610ce057610bc59587610bbc60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b610c6557611884565b610bcb57005b610c367fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b610cdb680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611884565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f610b44565b303b159150610b3c565b889150610b32565b34610157576020600319360112610157576004355f52600160205260ff60405f2054166003811015610d5e5760405160029091148152602090f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b3461015757602060031936011261015757610305600435610dab81610139565b610db36123ce565b61197e565b346101575761014060031936011261015757610305600435602435610ddc3661022b565b91611aac565b15610de957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964207472616e73616374696f6e2070726f706f73616c000000006044820152fd5b60405190610e566080836103e2565b6080368337565b60405190610280610e6e81846103e2565b368337565b60405190610180610e6e81846103e2565b604090815191610e6e81846103e2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805182101561081a5760209160051b010190565b90600481101561081a5760051b0190565b90816020910312610157575180151581036101575790565b905f905b60028210610f0f57505050565b6040808281866001953701930191019091610f02565b90949392604090610f456101009483610180860199863783850190610efe565b60c0830137015f905b60048210610f5b57505050565b6020806001928551815201930191019091610f4e565b6040513d5f823e3d90fd5b15610f8357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152fd5b90601481101561081a5760051b0190565b909493926040906110126101009483610380860199863783850190610efe565b60c0830137015f905b6014821061102857505050565b602080600192855181520193019101909161101b565b906110488261041a565b61105560405191826103e2565b828152601f19611065829461041a565b0190602036910137565b90602080835192838152019201905f5b81811061108c5750505090565b825184526020938401939092019160010161107f565b601f8260209493601f1993818652868601375f8582860101520116010190565b92906110fa94926110de6110ec9260608752606087019061106f565b90858203602087015261106f565b9260408185039101526110a2565b90565b9061110a91959295611cce565b9461111e611119828885611e44565b610de2565b600282511180156113a9575b156112e25761113986836121f5565b90611142610e5d565b915f5b601481106112c35750506111d19160209161119161117860075473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fe56ac42f00000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601610ff2565b03915afa80156112be576111ec915f9161128f575b50610f7c565b6111f6858261225e565b611200815161103e565b9161120b865161103e565b935f5b835181101561124c578061122460019286610ec1565b5161122f8288610ec1565b5261123a818a610ec1565b516112458289610ec1565b520161120e565b5092946112879196507fcb56a7130431b68e0e636f24584d40580490c1bf882bef3701f317d47ba98c389492506040519384933397856110c2565b0390a2600190565b6112b1915060203d6020116112b7575b6112a981836103e2565b810190610ee6565b5f6111e6565b503d61129f565b610f71565b806112d060019284610ec1565b516112db8287610fe1565b5201611145565b6112ec8683612177565b906112f5610e47565b915f5b6004811061138a57505061136b9160209161132b61117860065473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937f5fe8c13b00000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601610f25565b03915afa80156112be57611385915f9161128f5750610f7c565b6111ec565b8061139760019284610ec1565b516113a28287610ed5565b52016112f8565b50600286511161112a565b90600c81101561081a5760051b0190565b909493926040906113e56101009483610280860199863783850190610efe565b60c0830137015f905b600c82106113fb57505050565b60208060019285518152019301910190916113ee565b1561141857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4661696c656420746f207472616e7366657220455243323020746f6b656e73006044820152fd5b929160028251115f1461163b57600c82511161160d576114969184612377565b9061149f610e73565b915f5b600c81106115ee575050611515916020916114d561117860055473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937f8cbac0fa00000000000000000000000000000000000000000000000000000000845260c08101906040810190600486016113c5565b03915afa80156112be575f9261153761159d9260209486916115d75750610f7c565b61155961117860035473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101929092529093849283919082906044820190565b03925af180156112be57610418915f916115b8575b50611411565b6115d1915060203d6020116112b7576112a981836103e2565b5f6115b2565b6112b19150853d87116112b7576112a981836103e2565b806115fb60019284610ec1565b5161160682876113b4565b52016114a2565b7f71798fb5000000000000000000000000000000000000000000000000000000005f52600c60045260245b5ffd5b6116459184612311565b9061164e610e47565b915f5b600481106116ab5750506116849160209161132b61117860045473ffffffffffffffffffffffffffffffffffffffff1690565b03915afa80156112be575f926116a661159d9260209486916115d75750610f7c565b611537565b806116b860019284610ec1565b516116c38287610ed5565b5201611651565b909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115611842575b506106ee5761171b6123ce565b604051927f52d1902d00000000000000000000000000000000000000000000000000000000845260208460048173ffffffffffffffffffffffffffffffffffffffff87165afa5f9481611811575b506117b0577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff831660045260245ffd5b90917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc84036117e45761041892935061269e565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600484905260245ffd5b61183491955060203d60201161183b575b61182c81836103e2565b8101906123bf565b935f611769565b503d611822565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f61170e565b9473ffffffffffffffffffffffffffffffffffffffff809694818096956118c78296976118af611bb5565b6118b7611bb5565b6118bf611bb5565b610db3611bb5565b6118cf611bb5565b6118d7611bb5565b1673ffffffffffffffffffffffffffffffffffffffff1960025416176002551673ffffffffffffffffffffffffffffffffffffffff1960045416176004551673ffffffffffffffffffffffffffffffffffffffff1960055416176005551673ffffffffffffffffffffffffffffffffffffffff1960065416176006551673ffffffffffffffffffffffffffffffffffffffff196007541617600755565b60031115610d5e57565b73ffffffffffffffffffffffffffffffffffffffff168015611a345773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300548273ffffffffffffffffffffffffffffffffffffffff198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b90949392604090611a806101009483610140860199863783850190610efe565b60c0830137015f905b60028210611a9657505050565b6020806001928551815201930191019091611a89565b91611b2791602091611abc610e84565b858152916020830152611ae761117860025473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937ff5c9d69e00000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611a60565b03915afa80156112be575f92611b4961159d9260209486916115d75750610f7c565b611b6b61117860035473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101929092529093849283919082906064820190565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611be457565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f825b60088210611c22575050506101000190565b6020806001928551815201930191019091611c10565b611c9f60c0611c4861010061040a565b833581529260208101356020850152611c8b611c7e6040830180356040880152611c728160200190565b35606088015260400190565b8035608087015260200190565b3560a085015201803560c084015260200190565b3560e0820152604051611cc881611cba602082019485611c0c565b03601f1981018352826103e2565b51902090565b9190918051908351600a83118015611d50575b611d235760026110fa9311908115611d18575b5015611d0c57611d06600a80926125a7565b936125a7565b611d06600280926125a7565b60029150115f611cf4565b7f9ebbc98e000000000000000000000000000000000000000000000000000000005f52600a60045260245ffd5b50600a8111611ce1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211611db457565b611d5a565b15611dc057565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c6f636b65642070726f6f662063616e206f6e6c79206265207375626d69747460448201527f656420627920746865206c6f636b6572206164647265737300000000000000006064820152fd5b90611e4e91612610565b9290915f935b8351851015611fb857611e678585610ec1565b5115611fad5784151580611f88575b611f4f57611ea0611e99611e8a8787610ec1565b515f52600160205260405f2090565b5460ff1690565b611ea981611974565b611ee657611638611eba8686610ec1565b517f83925127000000000000000000000000000000000000000000000000000000005f52600452602490565b9091936002611efb611e99611e8a8488610ec1565b611f0481611974565b14611f16576001905b01939190611e54565b611f236116389185610ec1565b517f41a06d28000000000000000000000000000000000000000000000000000000005f52600452602490565b611638611f5c8686610ec1565b517fdd574831000000000000000000000000000000000000000000000000000000005f52600452602490565b50611f938585610ec1565b51611fa6611fa087611d87565b86610ec1565b5114611e76565b909193600190611f0d565b5f94509250905b82518410156120b557611fd28484610ec1565b51156120ab5783151580612086575b612079576002611ff7611e99611e8a8787610ec1565b61200081611974565b0361201257611638611f238585610ec1565b90926001612026611e99611e8a8487610ec1565b61202f81611974565b14612040576001905b019290611fbf565b61204d6116389184610ec1565b517f79e1da47000000000000000000000000000000000000000000000000000000005f52600452602490565b611638611f5c8585610ec1565b506120918484610ec1565b516120a461209e86611d87565b85610ec1565b5114611fe1565b9092600190612038565b92506120c19150611c38565b73ffffffffffffffffffffffffffffffffffffffff6121046120ea835f525f60205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b16612110575b50600190565b6121276120ea612144925f525f60205260405f2090565b73ffffffffffffffffffffffffffffffffffffffff163314611db9565b5f61210a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611db45760010190565b612181600461103e565b905f935f5b82518110156121b7578061219c60019285610ec1565b516121b06121a98961214a565b9887610ec1565b5201612186565b509290505f5b81518110156121ee57806121d360019284610ec1565b516121e76121e08861214a565b9786610ec1565b52016121bd565b5090925050565b6121ff601461103e565b905f935f5b825181101561222e578061221a60019285610ec1565b516122276121a98961214a565b5201612204565b509290505f5b81518110156121ee578061224a60019284610ec1565b516122576121e08861214a565b5201612234565b91905f5b83518110156122b2578061227860019286610ec1565b515f528160205260405f2060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905501612262565b5091505f5b825181101561230c57806122cd60019285610ec1565b515f528160205261230660405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b016122b7565b509050565b929061231d600461103e565b9160019483511561081a5760208401525f5b8251811015612359578061234560019285610ec1565b516123526121a98961214a565b520161232f565b5093612373915092919261236c8161214a565b5083610ec1565b5290565b9290612383600c61103e565b9160019483511561081a5760208401525f5b825181101561235957806123ab60019285610ec1565b516123b86121a98961214a565b5201612395565b90816020910312610157575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361240e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b916124516110fa949260408552604085019061106f565b9260208185039101526110a2565b90925f925b825184101561256b576124778484610ec1565b51936001612490611e99875f52600160205260405f2090565b61249981611974565b036124cb577f79e1da47000000000000000000000000000000000000000000000000000000005f52600485905260245ffd5b9091929360026124e6611e99835f52600160205260405f2090565b6124ef81611974565b14612540579061253761250c6001935f52600160205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b01929190612464565b7f41a06d28000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90937f7ff08e0ca1fce6b202b83128811e4f6ceda54930aa074cd365bf68f95c20ce199293506125a260405192839233968461243a565b0390a2565b918183511461260c576125b98261103e565b905f5b84518110156125e457806125d260019287610ec1565b516125dd8286610ec1565b52016125bc565b5092919091515b8181106125f757505090565b805f61260560019386610ec1565b52016125eb565b9050565b919061261c835161103e565b90612627815161103e565b905f5b8551811015612652578061264060019288610ec1565b5161264b8287610ec1565b520161262a565b5091929093505f5b8251811015612682578061267060019285610ec1565b5161267b8288610ec1565b520161265a565b5091905061268f81612808565b5061269983612808565b509190565b90813b156127825773ffffffffffffffffffffffffffffffffffffffff82168073ffffffffffffffffffffffffffffffffffffffff197f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156127515761274e916127c4565b50565b50503461275a57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b5f806110fa93602081519101845af43d15612800573d916127e4836105e0565b926127f260405194856103e2565b83523d5f602085013e612820565b606091612820565b6110fa60016020835160051b840101602084016128b9565b9061285d575080511561283557805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806128b0575b61286e575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612866565b91906040838203106129585782519282818095602084015b8581106128f757505082518151845281526128eb926128b9565b602061041893016128b9565b91509150805185600114612932577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b8211612945575b602001849186916128d1565b6020909501805186518252865294612939565b50505056fea264697066735822122070b174a5c29dba443acc9f5eb1ca30acdcfe0ec7036eb6570727fdba83e3cc6e64736f6c634300081b0033","sourceMap":"2281:5370:36:-:0;;;;;;;1171:4:70;1163:13;;2281:5370:36;;;;;;1163:13:70;2281:5370:36;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c80630107eb4a1461013457806312c0fed21461012f5780633e96e2731461012a5780634ad89929146101255780634f1ef2861461012057806352d1902d1461011b578063715018a614610116578063788c0456146101115780638bb2513b1461010c5780638da5cb5b146101075780639b2e8b52146101025780639fcc50af146100fd578063ad3cb1cc146100f8578063c29a6fda146100f3578063cc2a9a5b146100ee578063d5b5cc23146100e9578063f2fde38b146100e45763f756356a146100df575f80fd5b610db8565b610d8b565b610d23565b610a86565b610a29565b6109b3565b610956565b6108d4565b610882565b61081f565b6107c7565b610716565b610677565b6105fc565b6105c6565b6104bd565b61025b565b61015b565b73ffffffffffffffffffffffffffffffffffffffff81160361015757565b5f80fd5b346101575760606003193601126101575773ffffffffffffffffffffffffffffffffffffffff60043561018d81610139565b8160243561019a81610139565b81604435936101a885610139565b6101b0611bb5565b6101b8611bb5565b1673ffffffffffffffffffffffffffffffffffffffff1960025416176002551673ffffffffffffffffffffffffffffffffffffffff1960045416176004551673ffffffffffffffffffffffffffffffffffffffff1960055416176005555f80f35b60031961010091011261015757600490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc61010091011261015757604490565b34610157576101206003193601126101575761027636610219565b61028c610104359161028783610139565b611c38565b90815f525f60205273ffffffffffffffffffffffffffffffffffffffff60405f20541615801561038b575b15610307576102d0610305925f525f60205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff19825416179055565b005b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f6f6620616c7265616479206c6f636b656420627920616e6f746865722060448201527f70617274790000000000000000000000000000000000000000000000000000006064820152fd5b50815f525f60205273ffffffffffffffffffffffffffffffffffffffff60405f20541633146102b7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff82111761040557604052565b6103b5565b9061041860405192836103e2565b565b67ffffffffffffffff81116104055760051b60200190565b9080601f830112156101575781356104498161041a565b9261045760405194856103e2565b81845260208085019260051b82010192831161015757602001905b82821061047f5750505090565b8135815260209182019101610472565b9181601f840112156101575782359167ffffffffffffffff8311610157576020838186019501011161015757565b34610157576101606003193601126101575760043567ffffffffffffffff8111610157576104ef903690600401610432565b60243567ffffffffffffffff81116101575761050f903690600401610432565b906105193661022b565b91610144359167ffffffffffffffff83116101575761055d9361054361054b94369060040161048f565b9390926110fd565b60405190151581529081906020820190565b0390f35b90610160600319830112610157576004359160243567ffffffffffffffff8111610157578161059291600401610432565b916101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c60443593011261015757606490565b34610157576103056105d736610561565b92919091611476565b67ffffffffffffffff811161040557601f01601f191660200190565b60406003193601126101575760043561061481610139565b6024359067ffffffffffffffff8211610157573660238301121561015757816004013590610641826105e0565b9161064f60405193846103e2565b8083523660248286010111610157576020815f926024610305970183870137840101526116ca565b34610157575f6003193601126101575773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036106ee5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610157575f6003193601126101575761072e6123ce565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610157576107d536610561565b6107e2839492935161103e565b9081511561081a576108008261030596866020610815960152611cce565b9490809461080f848884611e44565b50611476565b61225e565b610e94565b346101575760406003193601126101575760043567ffffffffffffffff811161015757610850903690600401610432565b6024359067ffffffffffffffff82116101575761087461030592369060040161048f565b9161087d6123ce565b61245f565b34610157575f60031936011261015757602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461015757610160600319360112610157576024356004356108f53661022b565b906101443567ffffffffffffffff811161015757839261091c61092492369060040161048f565b949093611aac565b604080519061093381836103e2565b60018252601f190136602083013780511561081a5761030593602082015261245f565b346101575760206003193601126101575773ffffffffffffffffffffffffffffffffffffffff60043561098881610139565b610990611bb5565b1673ffffffffffffffffffffffffffffffffffffffff1960025416176002555f80f35b34610157575f6003193601126101575760408051906109d281836103e2565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b346101575760206003193601126101575773ffffffffffffffffffffffffffffffffffffffff600435610a5b81610139565b610a636123ce565b1673ffffffffffffffffffffffffffffffffffffffff1960035416176003555f80f35b346101575760c060031936011261015757600435610aa381610139565b60243590610ab082610139565b604435610abc81610139565b606435610ac881610139565b60843590610ad582610139565b60a43592610ae284610139565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549567ffffffffffffffff610b2860ff60408a901c16159867ffffffffffffffff1690565b1680159081610d1b575b6001149081610d11575b159081610d08575b50610ce057610bc59587610bbc60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b610c6557611884565b610bcb57005b610c367fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b610cdb680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611884565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f610b44565b303b159150610b3c565b889150610b32565b34610157576020600319360112610157576004355f52600160205260ff60405f2054166003811015610d5e5760405160029091148152602090f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b3461015757602060031936011261015757610305600435610dab81610139565b610db36123ce565b61197e565b346101575761014060031936011261015757610305600435602435610ddc3661022b565b91611aac565b15610de957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f496e76616c6964207472616e73616374696f6e2070726f706f73616c000000006044820152fd5b60405190610e566080836103e2565b6080368337565b60405190610280610e6e81846103e2565b368337565b60405190610180610e6e81846103e2565b604090815191610e6e81846103e2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805182101561081a5760209160051b010190565b90600481101561081a5760051b0190565b90816020910312610157575180151581036101575790565b905f905b60028210610f0f57505050565b6040808281866001953701930191019091610f02565b90949392604090610f456101009483610180860199863783850190610efe565b60c0830137015f905b60048210610f5b57505050565b6020806001928551815201930191019091610f4e565b6040513d5f823e3d90fd5b15610f8357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152fd5b90601481101561081a5760051b0190565b909493926040906110126101009483610380860199863783850190610efe565b60c0830137015f905b6014821061102857505050565b602080600192855181520193019101909161101b565b906110488261041a565b61105560405191826103e2565b828152601f19611065829461041a565b0190602036910137565b90602080835192838152019201905f5b81811061108c5750505090565b825184526020938401939092019160010161107f565b601f8260209493601f1993818652868601375f8582860101520116010190565b92906110fa94926110de6110ec9260608752606087019061106f565b90858203602087015261106f565b9260408185039101526110a2565b90565b9061110a91959295611cce565b9461111e611119828885611e44565b610de2565b600282511180156113a9575b156112e25761113986836121f5565b90611142610e5d565b915f5b601481106112c35750506111d19160209161119161117860075473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937fe56ac42f00000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601610ff2565b03915afa80156112be576111ec915f9161128f575b50610f7c565b6111f6858261225e565b611200815161103e565b9161120b865161103e565b935f5b835181101561124c578061122460019286610ec1565b5161122f8288610ec1565b5261123a818a610ec1565b516112458289610ec1565b520161120e565b5092946112879196507fcb56a7130431b68e0e636f24584d40580490c1bf882bef3701f317d47ba98c389492506040519384933397856110c2565b0390a2600190565b6112b1915060203d6020116112b7575b6112a981836103e2565b810190610ee6565b5f6111e6565b503d61129f565b610f71565b806112d060019284610ec1565b516112db8287610fe1565b5201611145565b6112ec8683612177565b906112f5610e47565b915f5b6004811061138a57505061136b9160209161132b61117860065473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937f5fe8c13b00000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601610f25565b03915afa80156112be57611385915f9161128f5750610f7c565b6111ec565b8061139760019284610ec1565b516113a28287610ed5565b52016112f8565b50600286511161112a565b90600c81101561081a5760051b0190565b909493926040906113e56101009483610280860199863783850190610efe565b60c0830137015f905b600c82106113fb57505050565b60208060019285518152019301910190916113ee565b1561141857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4661696c656420746f207472616e7366657220455243323020746f6b656e73006044820152fd5b929160028251115f1461163b57600c82511161160d576114969184612377565b9061149f610e73565b915f5b600c81106115ee575050611515916020916114d561117860055473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937f8cbac0fa00000000000000000000000000000000000000000000000000000000845260c08101906040810190600486016113c5565b03915afa80156112be575f9261153761159d9260209486916115d75750610f7c565b61155961117860035473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101929092529093849283919082906044820190565b03925af180156112be57610418915f916115b8575b50611411565b6115d1915060203d6020116112b7576112a981836103e2565b5f6115b2565b6112b19150853d87116112b7576112a981836103e2565b806115fb60019284610ec1565b5161160682876113b4565b52016114a2565b7f71798fb5000000000000000000000000000000000000000000000000000000005f52600c60045260245b5ffd5b6116459184612311565b9061164e610e47565b915f5b600481106116ab5750506116849160209161132b61117860045473ffffffffffffffffffffffffffffffffffffffff1690565b03915afa80156112be575f926116a661159d9260209486916115d75750610f7c565b611537565b806116b860019284610ec1565b516116c38287610ed5565b5201611651565b909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115611842575b506106ee5761171b6123ce565b604051927f52d1902d00000000000000000000000000000000000000000000000000000000845260208460048173ffffffffffffffffffffffffffffffffffffffff87165afa5f9481611811575b506117b0577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff831660045260245ffd5b90917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc84036117e45761041892935061269e565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600484905260245ffd5b61183491955060203d60201161183b575b61182c81836103e2565b8101906123bf565b935f611769565b503d611822565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f61170e565b9473ffffffffffffffffffffffffffffffffffffffff809694818096956118c78296976118af611bb5565b6118b7611bb5565b6118bf611bb5565b610db3611bb5565b6118cf611bb5565b6118d7611bb5565b1673ffffffffffffffffffffffffffffffffffffffff1960025416176002551673ffffffffffffffffffffffffffffffffffffffff1960045416176004551673ffffffffffffffffffffffffffffffffffffffff1960055416176005551673ffffffffffffffffffffffffffffffffffffffff1960065416176006551673ffffffffffffffffffffffffffffffffffffffff196007541617600755565b60031115610d5e57565b73ffffffffffffffffffffffffffffffffffffffff168015611a345773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300548273ffffffffffffffffffffffffffffffffffffffff198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b90949392604090611a806101009483610140860199863783850190610efe565b60c0830137015f905b60028210611a9657505050565b6020806001928551815201930191019091611a89565b91611b2791602091611abc610e84565b858152916020830152611ae761117860025473ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937ff5c9d69e00000000000000000000000000000000000000000000000000000000845260c0810190604081019060048601611a60565b03915afa80156112be575f92611b4961159d9260209486916115d75750610f7c565b611b6b61117860035473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101929092529093849283919082906064820190565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611be457565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f825b60088210611c22575050506101000190565b6020806001928551815201930191019091611c10565b611c9f60c0611c4861010061040a565b833581529260208101356020850152611c8b611c7e6040830180356040880152611c728160200190565b35606088015260400190565b8035608087015260200190565b3560a085015201803560c084015260200190565b3560e0820152604051611cc881611cba602082019485611c0c565b03601f1981018352826103e2565b51902090565b9190918051908351600a83118015611d50575b611d235760026110fa9311908115611d18575b5015611d0c57611d06600a80926125a7565b936125a7565b611d06600280926125a7565b60029150115f611cf4565b7f9ebbc98e000000000000000000000000000000000000000000000000000000005f52600a60045260245ffd5b50600a8111611ce1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211611db457565b611d5a565b15611dc057565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4c6f636b65642070726f6f662063616e206f6e6c79206265207375626d69747460448201527f656420627920746865206c6f636b6572206164647265737300000000000000006064820152fd5b90611e4e91612610565b9290915f935b8351851015611fb857611e678585610ec1565b5115611fad5784151580611f88575b611f4f57611ea0611e99611e8a8787610ec1565b515f52600160205260405f2090565b5460ff1690565b611ea981611974565b611ee657611638611eba8686610ec1565b517f83925127000000000000000000000000000000000000000000000000000000005f52600452602490565b9091936002611efb611e99611e8a8488610ec1565b611f0481611974565b14611f16576001905b01939190611e54565b611f236116389185610ec1565b517f41a06d28000000000000000000000000000000000000000000000000000000005f52600452602490565b611638611f5c8686610ec1565b517fdd574831000000000000000000000000000000000000000000000000000000005f52600452602490565b50611f938585610ec1565b51611fa6611fa087611d87565b86610ec1565b5114611e76565b909193600190611f0d565b5f94509250905b82518410156120b557611fd28484610ec1565b51156120ab5783151580612086575b612079576002611ff7611e99611e8a8787610ec1565b61200081611974565b0361201257611638611f238585610ec1565b90926001612026611e99611e8a8487610ec1565b61202f81611974565b14612040576001905b019290611fbf565b61204d6116389184610ec1565b517f79e1da47000000000000000000000000000000000000000000000000000000005f52600452602490565b611638611f5c8585610ec1565b506120918484610ec1565b516120a461209e86611d87565b85610ec1565b5114611fe1565b9092600190612038565b92506120c19150611c38565b73ffffffffffffffffffffffffffffffffffffffff6121046120ea835f525f60205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b16612110575b50600190565b6121276120ea612144925f525f60205260405f2090565b73ffffffffffffffffffffffffffffffffffffffff163314611db9565b5f61210a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611db45760010190565b612181600461103e565b905f935f5b82518110156121b7578061219c60019285610ec1565b516121b06121a98961214a565b9887610ec1565b5201612186565b509290505f5b81518110156121ee57806121d360019284610ec1565b516121e76121e08861214a565b9786610ec1565b52016121bd565b5090925050565b6121ff601461103e565b905f935f5b825181101561222e578061221a60019285610ec1565b516122276121a98961214a565b5201612204565b509290505f5b81518110156121ee578061224a60019284610ec1565b516122576121e08861214a565b5201612234565b91905f5b83518110156122b2578061227860019286610ec1565b515f528160205260405f2060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905501612262565b5091505f5b825181101561230c57806122cd60019285610ec1565b515f528160205261230660405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b016122b7565b509050565b929061231d600461103e565b9160019483511561081a5760208401525f5b8251811015612359578061234560019285610ec1565b516123526121a98961214a565b520161232f565b5093612373915092919261236c8161214a565b5083610ec1565b5290565b9290612383600c61103e565b9160019483511561081a5760208401525f5b825181101561235957806123ab60019285610ec1565b516123b86121a98961214a565b5201612395565b90816020910312610157575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361240e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b916124516110fa949260408552604085019061106f565b9260208185039101526110a2565b90925f925b825184101561256b576124778484610ec1565b51936001612490611e99875f52600160205260405f2090565b61249981611974565b036124cb577f79e1da47000000000000000000000000000000000000000000000000000000005f52600485905260245ffd5b9091929360026124e6611e99835f52600160205260405f2090565b6124ef81611974565b14612540579061253761250c6001935f52600160205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b01929190612464565b7f41a06d28000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90937f7ff08e0ca1fce6b202b83128811e4f6ceda54930aa074cd365bf68f95c20ce199293506125a260405192839233968461243a565b0390a2565b918183511461260c576125b98261103e565b905f5b84518110156125e457806125d260019287610ec1565b516125dd8286610ec1565b52016125bc565b5092919091515b8181106125f757505090565b805f61260560019386610ec1565b52016125eb565b9050565b919061261c835161103e565b9061262781