@ensuro/core 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -336,19 +336,6 @@
|
|
|
336
336
|
"stateMutability": "view",
|
|
337
337
|
"type": "function"
|
|
338
338
|
},
|
|
339
|
-
{
|
|
340
|
-
"inputs": [],
|
|
341
|
-
"name": "REBALANCE_ROLE",
|
|
342
|
-
"outputs": [
|
|
343
|
-
{
|
|
344
|
-
"internalType": "bytes32",
|
|
345
|
-
"name": "",
|
|
346
|
-
"type": "bytes32"
|
|
347
|
-
}
|
|
348
|
-
],
|
|
349
|
-
"stateMutability": "view",
|
|
350
|
-
"type": "function"
|
|
351
|
-
},
|
|
352
339
|
{
|
|
353
340
|
"inputs": [],
|
|
354
341
|
"name": "WITHDRAW_WON_PREMIUMS_ROLE",
|
|
@@ -849,81 +836,6 @@
|
|
|
849
836
|
"stateMutability": "view",
|
|
850
837
|
"type": "function"
|
|
851
838
|
},
|
|
852
|
-
{
|
|
853
|
-
"inputs": [
|
|
854
|
-
{
|
|
855
|
-
"components": [
|
|
856
|
-
{
|
|
857
|
-
"internalType": "uint256",
|
|
858
|
-
"name": "id",
|
|
859
|
-
"type": "uint256"
|
|
860
|
-
},
|
|
861
|
-
{
|
|
862
|
-
"internalType": "uint256",
|
|
863
|
-
"name": "payout",
|
|
864
|
-
"type": "uint256"
|
|
865
|
-
},
|
|
866
|
-
{
|
|
867
|
-
"internalType": "uint256",
|
|
868
|
-
"name": "premium",
|
|
869
|
-
"type": "uint256"
|
|
870
|
-
},
|
|
871
|
-
{
|
|
872
|
-
"internalType": "uint256",
|
|
873
|
-
"name": "scr",
|
|
874
|
-
"type": "uint256"
|
|
875
|
-
},
|
|
876
|
-
{
|
|
877
|
-
"internalType": "uint256",
|
|
878
|
-
"name": "lossProb",
|
|
879
|
-
"type": "uint256"
|
|
880
|
-
},
|
|
881
|
-
{
|
|
882
|
-
"internalType": "uint256",
|
|
883
|
-
"name": "purePremium",
|
|
884
|
-
"type": "uint256"
|
|
885
|
-
},
|
|
886
|
-
{
|
|
887
|
-
"internalType": "uint256",
|
|
888
|
-
"name": "premiumForEnsuro",
|
|
889
|
-
"type": "uint256"
|
|
890
|
-
},
|
|
891
|
-
{
|
|
892
|
-
"internalType": "uint256",
|
|
893
|
-
"name": "premiumForRm",
|
|
894
|
-
"type": "uint256"
|
|
895
|
-
},
|
|
896
|
-
{
|
|
897
|
-
"internalType": "uint256",
|
|
898
|
-
"name": "premiumForLps",
|
|
899
|
-
"type": "uint256"
|
|
900
|
-
},
|
|
901
|
-
{
|
|
902
|
-
"internalType": "contract IRiskModule",
|
|
903
|
-
"name": "riskModule",
|
|
904
|
-
"type": "address"
|
|
905
|
-
},
|
|
906
|
-
{
|
|
907
|
-
"internalType": "uint40",
|
|
908
|
-
"name": "start",
|
|
909
|
-
"type": "uint40"
|
|
910
|
-
},
|
|
911
|
-
{
|
|
912
|
-
"internalType": "uint40",
|
|
913
|
-
"name": "expiration",
|
|
914
|
-
"type": "uint40"
|
|
915
|
-
}
|
|
916
|
-
],
|
|
917
|
-
"internalType": "struct Policy.PolicyData",
|
|
918
|
-
"name": "policy",
|
|
919
|
-
"type": "tuple"
|
|
920
|
-
}
|
|
921
|
-
],
|
|
922
|
-
"name": "rebalancePolicy",
|
|
923
|
-
"outputs": [],
|
|
924
|
-
"stateMutability": "nonpayable",
|
|
925
|
-
"type": "function"
|
|
926
|
-
},
|
|
927
839
|
{
|
|
928
840
|
"inputs": [
|
|
929
841
|
{
|
|
@@ -1250,8 +1162,8 @@
|
|
|
1250
1162
|
"type": "function"
|
|
1251
1163
|
}
|
|
1252
1164
|
],
|
|
1253
|
-
"bytecode": "0x6101206040523060601b6080523480156200001957600080fd5b50604051620063e4380380620063e48339810160408190526200003c9162000105565b6001600160601b0319606084811b821660c05283811b82166101005282901b1660e0526040805163313ce56760e01b815290516003916001600160a01b0384169163313ce56791600480820192602092909190829003018186803b158015620000a457600080fd5b505afa158015620000b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000df919062000159565b620000eb91906200028f565b620000f890600a620001ce565b60a05250620002e4915050565b6000806000606084860312156200011b57600080fd5b83516200012881620002cb565b60208501519093506200013b81620002cb565b60408501519092506200014e81620002cb565b809150509250925092565b6000602082840312156200016c57600080fd5b815160ff811681146200017e57600080fd5b9392505050565b600181815b80851115620001c6578160001904821115620001aa57620001aa620002b5565b80851615620001b857918102915b93841c93908002906200018a565b509250929050565b60006200017e60ff841683600082620001ea5750600162000289565b81620001f95750600062000289565b81600181146200021257600281146200021d576200023d565b600191505062000289565b60ff841115620002315762000231620002b5565b50506001821b62000289565b5060208310610133831016604e8410600b841016171562000262575081810a62000289565b6200026e838362000185565b8060001904821115620002855762000285620002b5565b0290505b92915050565b600060ff821660ff841680821015620002ac57620002ac620002b5565b90039392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114620002e157600080fd5b50565b60805160601c60a05160c05160601c60e05160601c6101005160601c615f7b62000469600039600081816106db01528181610a7e01528181613034015281816139f101526141770152600081816107e401528181610b0001528181610bcc01528181610d1301528181611375015281816114eb0152818161160a01528181611bd201528181613eb80152614b8e0152600081816105760152818161098e01528181610b2e015281816110f20152818161115f015281816111f301528181611292015281816113a40152818161187701528181611c6c01528181611d1e01528181611df601528181611fa9015281816123620152818161250c01528181612a4c01528181612b4301528181612d610152818161352001528181613866015281816138e401528181613b4901528181613bfc01528181613cf80152613dab0152600081816103aa01528181612e5301528181612e870152614589015260008181610fd201528181611012015281816116c40152818161170401526117930152615f7b6000f3fe6080604052600436106102725760003560e01c806365e29c7e1161014f578063af02808a116100c1578063dea167d51161007a578063dea167d5146107c0578063e5a6b10f146107d5578063e823584a14610808578063f3fef3a31461081d578063f67b2bad1461083d578063fcbb17fe1461085f57600080fd5b8063af02808a146106cc578063b0ec4bcf146106ff578063b63d382e1461071f578063b77ddfea1461073f578063ca143d1814610754578063ce937e7b1461078157600080fd5b8063846253d111610113578063846253d1146105f85780638a9defff146106185780638ca23bc91461063857806398e88ca81461066c5780639e556b2b1461068c578063ab600169146106ac57600080fd5b806365e29c7e1461055257806379502c55146105675780638129fc1c146105ae57806381ced71f146105c35780638456cb59146105e357600080fd5b806343060237116101e8578063536c9a43116101ac578063536c9a431461047d5780635680e145146104925780635b494dd5146104c65780635c975abb146104fa57806363c0f4b11461051d57806365b710081461053257600080fd5b806343060237146103e157806347e7ef24146104015780634a47a3e0146104215780634f1ef2861461045557806352d1902d1461046857600080fd5b806324ea54f41161023a57806324ea54f41461032157806326ccbd22146103435780632a2be82d146103585780633659cfe614610378578063396512fd146103985780633f4ba83a146103cc57600080fd5b8063066dda0e1461027757806319704a3a146102995780631a548a27146102cc5780631c5c4aea146102e1578063220c262b14610301575b600080fd5b34801561028357600080fd5b50610297610292366004615903565b61087f565b005b3480156102a557600080fd5b506102b96102b436600461597c565b6108da565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b5060ce546102b9565b3480156102ed57600080fd5b506102b96102fc3660046159da565b610d88565b34801561030d57600080fd5b506102b961031c366004615a18565b610da5565b34801561032d57600080fd5b506102b9600080516020615f2683398151915281565b34801561034f57600080fd5b506102b9610de7565b34801561036457600080fd5b506102b9610373366004615765565b610e0b565b34801561038457600080fd5b50610297610393366004615765565b610fc7565b3480156103a457600080fd5b506102b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d857600080fd5b506102976110a7565b3480156103ed57600080fd5b506102976103fc366004615765565b611154565b34801561040d57600080fd5b5061029761041c3660046158ba565b611567565b34801561042d57600080fd5b506102b97fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b61029761046336600461579f565b6116b9565b34801561047457600080fd5b506102b9611786565b34801561048957600080fd5b5060d0546102b9565b34801561049e57600080fd5b506102b97f2c09deb013d6a86a9063c95b5e2b10937d1128a3937347eb7e00408ed9fb1a9c81565b3480156104d257600080fd5b506102b97f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b34801561050657600080fd5b5060335460ff1660405190151581526020016102c3565b34801561052957600080fd5b506102b9600a81565b34801561053e57600080fd5b5061029761054d366004615765565b611839565b34801561055e57600080fd5b506102b9611a56565b34801561057357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016102c3565b3480156105ba57600080fd5b50610297611b3c565b3480156105cf57600080fd5b506102976105de3660046159da565b611bc5565b3480156105ef57600080fd5b50610297611c40565b34801561060457600080fd5b506102b96106133660046159da565b611cd6565b34801561062457600080fd5b506102976106333660046158e6565b611ecc565b34801561064457600080fd5b506102b97fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b79405781565b34801561067857600080fd5b506102976106873660046158e6565b611f6b565b34801561069857600080fd5b506102976106a7366004615932565b612323565b3480156106b857600080fd5b506102976106c73660046159f3565b612360565b3480156106d857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610596565b34801561070b57600080fd5b5061059661071a3660046159da565b6124a2565b34801561072b57600080fd5b5061029761073a366004615765565b6124e0565b34801561074b57600080fd5b506102b961278f565b34801561076057600080fd5b5061077461076f366004615765565b61284c565b6040516102c39190615a96565b34801561078d57600080fd5b506107a161079c366004615a3d565b612859565b604080516001600160a01b0390931683526020830191909152016102c3565b3480156107cc57600080fd5b506102b961287f565b3480156107e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610596565b34801561081457600080fd5b5060cf546102b9565b34801561082957600080fd5b506102b96108383660046158ba565b61288b565b34801561084957600080fd5b506102b9600080516020615edf83398151915281565b34801561086b57600080fd5b5061029761087a36600461587d565b612a01565b60335460ff16156108ab5760405162461bcd60e51b81526004016108a290615b89565b60405180910390fd5b6108d66108bd3684900384018461595f565b826108c95760006108cf565b83602001355b6000612c6f565b5050565b60006108e860335460ff1690565b156109055760405162461bcd60e51b81526004016108a290615b89565b6101208401516001600160a01b038116331461096f5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b60648201526084016108a2565b604051635dfdc5d760e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063bbfb8bae9060240160006040518083038186803b1580156109d057600080fd5b505afa1580156109e4573d6000803e3d6000fd5b50505050826bffffffffffffffffffffffff166060826001600160a01b0316901b610a0f9190615d50565b8552610a1a8561317a565b8551600090815260cc602052604081209190915560a086015160ce805491929091610a46908490615d50565b90915550610a559050856131aa565b8451604051632851206560e21b81526001600160a01b03868116600483015260248201929092527f00000000000000000000000000000000000000000000000000000000000000009091169063a144819490604401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b50505050610b2884308761010001518860a00151610af69190615d50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613368565b610bf4847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd9190615782565b60c08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613368565b60008560e00151118015610c8a5750806001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3c57600080fd5b505afa158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c749190615782565b6001600160a01b0316846001600160a01b031614155b15610d3b57610d3b84826001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190615782565b60e08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613368565b806001600160a01b03167ff8da20dc84e4c9850943fcd1a0587142b2bac3fef70840ccee41f5edd22bc47786604051610d749190615c4c565b60405180910390a2505082515b9392505050565b600081815260cd60205260408120610d9f906133d9565b92915050565b600082815260cd6020526040812081908190610dc190856133e4565b915091508115610dd4579150610d9f9050565b600092505050610d9f565b505092915050565b600060cf5460d05460ce54610dfc9190615d50565b610e069190615da9565b905090565b6000610e1960335460ff1690565b15610e365760405162461bcd60e51b81526004016108a290615b89565b600080610e4460c985613400565b91509150818015610e8157506001816003811115610e6457610e64615e43565b1480610e8157506002816003811115610e7f57610e7f615e43565b145b610ec45760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108a2565b6000846001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615864565b90506000610f4482613433565b90506001600160a01b038616631c0f4f81610f5f8385615da9565b6040518263ffffffff1660e01b8152600401610f7d91815260200190565b600060405180830381600087803b158015610f9757600080fd5b505af1158015610fab573d6000803e3d6000fd5b505050508082610fbb9190615da9565b9450505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110105760405162461bcd60e51b81526004016108a290615af1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611059600080516020615ebf833981519152546001600160a01b031690565b6001600160a01b03161461107f5760405162461bcd60e51b81526004016108a290615b3d565b611088816134d5565b604080516000808252602082019092526110a491839190613576565b50565b60405163c5b8f5cf60e01b8152600080516020615f2683398151915260048201819052600080516020615edf8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506108d66136f0565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111e65760405162461bcd60e51b815260206004820152603160248201527f4f6e6c792074686520506f6c696379506f6f6c436f6e6669672063616e20636860448201527030b733b29030b9b9b2ba26b0b730b3b2b960791b60648201526084016108a2565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561124a57600080fd5b505afa15801561125e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112829190615782565b6001600160a01b0316146114b5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e957600080fd5b505afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190615782565b6001600160a01b031663cec16f3f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561135b57600080fd5b505af115801561136f573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156113fb57600080fd5b505afa15801561140f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114339190615782565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401602060405180830381600087803b15801561147b57600080fd5b505af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190615847565b505b6001600160a01b038116156110a45760405163095ea7b360e01b81526001600160a01b03828116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b15801561152f57600080fd5b505af1158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190615847565b60335460ff161561158a5760405162461bcd60e51b81526004016108a290615b89565b60008061159860c985613400565b915091508180156115ba575060018160038111156115b8576115b8615e43565b145b6115fd5760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108a2565b6116326001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086613368565b6040516311f9fbc960e21b8152336004820152602481018490526001600160a01b038516906347e7ef2490604401602060405180830381600087803b15801561167a57600080fd5b505af115801561168e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b29190615864565b5050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117025760405162461bcd60e51b81526004016108a290615af1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661174b600080516020615ebf833981519152546001600160a01b031690565b6001600160a01b0316146117715760405162461bcd60e51b81526004016108a290615b3d565b61177a826134d5565b6108d682826001613576565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118265760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108a2565b50600080516020615ebf83398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b1580156118c157600080fd5b505afa1580156118d5573d6000803e3d6000fd5b50600292506118e2915050565b6118ed60c984613783565b60038111156118fe576118fe615e43565b146119435760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b60448201526064016108a2565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190615864565b15611a105760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b60648201526084016108a2565b816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c6000604051611a4a9190615a96565b60405180910390a25050565b600080805b611a6560c96133d9565b811015611b0d576000611a7960c9836137a0565b509050806001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab557600080fd5b505afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed9190615864565b611af79084615d50565b9250508080611b0590615e12565b915050611a5b565b506000611b18610de7565b905081811115611b3357611b2c8282615da9565b9250505090565b60009250505090565b600054610100900460ff16611b575760005460ff1615611b5b565b303b155b611b775760405162461bcd60e51b81526004016108a290615bb3565b600054610100900460ff16158015611b99576000805461ffff19166101011790555b611ba16137af565b611ba96137d8565b611bb1613807565b80156110a4576000805461ff001916905550565b611bfa6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084613368565b611c0381613a76565b6040805160018152602081018390527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a150565b6040516312d9a6ad60e01b8152600080516020615f2683398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611cb657600080fd5b505afa158015611cca573d6000803e3d6000fd5b505050506110a4613adb565b6040516312d9a6ad60e01b81527fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b794057600482018190523360248301526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312d9a6ad9060440160006040518083038186803b158015611d6057600080fd5b505afa158015611d74573d6000803e3d6000fd5b5050505060d054831115611d885760d05492505b60008311611dd85760405162461bcd60e51b815260206004820152601760248201527f4e6f207072656d69756d7320746f20776974686472617700000000000000000060448201526064016108a2565b8260d06000828254611dea9190615da9565b92505081905550611e8b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4d57600080fd5b505afa158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190615782565b84613b33565b6040805160008152602081018590527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a15090919050565b60335460ff1615611eef5760405162461bcd60e51b81526004016108a290615b89565b42611f0261018083016101608401615a5f565b64ffffffffff161115611f505760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b60448201526064016108a2565b6110a4611f623683900383018361595f565b60006001612c6f565b6040516312d9a6ad60e01b81527f2c09deb013d6a86a9063c95b5e2b10937d1128a3937347eb7e00408ed9fb1a9c60048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611ff357600080fd5b505afa158015612007573d6000803e3d6000fd5b5050505061201760335460ff1690565b156120345760405162461bcd60e51b81526004016108a290615b89565b61204b6120463684900384018461595f565b613edf565b8135600090815260cd6020526040812090805b61206860c96133d9565b8110156122b25760008061207d60c9846137a0565b90925090506000808061209088866133e4565b91509150811561211a576001600160a01b038516634438bcbb6120c06120bb368e90038e018e61595f565b613f45565b836040518363ffffffff1660e01b81526004016120e7929190918252602082015260400190565b600060405180830381600087803b15801561210157600080fd5b505af1158015612115573d6000803e3d6000fd5b505050505b600184600381111561212e5761212e615e43565b1480156121ec57506001600160a01b03851663334871546121576101408d016101208e01615765565b6121696101808e016101608f01615a5f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015264ffffffffff16602482015260440160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ec9190615847565b1561226557846001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561222a57600080fd5b505afa15801561223e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122629190615864565b92505b8261228157811561227c5761227a8886613f9f565b505b61229a565b61228c888685613fab565b506122978388615d50565b96505b505050505080806122aa90615e12565b91505061205e565b506122d460608501356122cd6120bb3688900388018861595f565b8385613fc0565b83356122e861014086016101208701615765565b6001600160a01b03167f5b6693e57e2edc10453988a22e50a605795daee9a5dde66f5267b0dee0a6b60660405160405180910390a350505050565b60335460ff16156123465760405162461bcd60e51b81526004016108a290615b89565b6108d66123583684900384018461595f565b826000612c6f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b957600080fd5b505afa1580156123cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f19190615782565b6001600160a01b0316336001600160a01b0316146124625760405162461bcd60e51b815260206004820152602860248201527f4f6e6c792061737365744d616e616765722063616e2063616c6c207468697320604482015267333ab731ba34b7b760c11b60648201526084016108a2565b60335460ff16156124855760405162461bcd60e51b81526004016108a290615b89565b8015612494576108d682613a76565b61249d82613433565b505050565b600080806124b160c9856137a0565b909250905060008160038111156124ca576124ca615e43565b146124d6575092915050565b5060009392505050565b6040516312d9a6ad60e01b8152600080516020615edf83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561255657600080fd5b505afa15801561256a573d6000803e3d6000fd5b50505050600a61257a60c96133d9565b106125d15760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d206e756d626572206f662045546f6b656e73207265616368656044820152601960fa1b60648201526084016108a2565b6125dc60c983614113565b156126295760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c00000000000060448201526064016108a2565b6001600160a01b0382166126765760405162461bcd60e51b815260206004820152601460248201527365546f6b656e2063616e2774206265207a65726f60601b60448201526064016108a2565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156126b957600080fd5b505afa1580156126cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f19190615782565b6001600160a01b0316146127475760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c000060448201526064016108a2565b61275460c983600161411f565b50816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c6001604051611a4a9190615a96565b600080805b61279e60c96133d9565b8110156128465760006127b260c9836137a0565b509050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127ee57600080fd5b505afa158015612802573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128269190615864565b6128309084615d50565b925050808061283e90615e12565b915050612794565b50919050565b6000610d9f60c983613783565b600082815260cd602052604081208190612873908461413d565b915091505b9250929050565b6000610e0660c96133d9565b600061289960335460ff1690565b156128b65760405162461bcd60e51b81526004016108a290615b89565b6000806128c460c986613400565b91509150818015612901575060018160038111156128e4576128e4615e43565b1480612901575060028160038111156128ff576128ff615e43565b145b61295f5760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b60648201526084016108a2565b60405163f3fef3a360e01b8152336004820181905260248201869052906000906001600160a01b0388169063f3fef3a390604401602060405180830381600087803b1580156129ad57600080fd5b505af11580156129c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e59190615864565b905080156129f7576129f78282613b33565b9695505050505050565b60405163c5b8f5cf60e01b8152600080516020615f2683398151915260048201819052600080516020615edf8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015612a8e57600080fd5b505afa158015612aa2573d6000803e3d6000fd5b50505050612aba8460c961411390919063ffffffff16565b612afe5760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b60448201526064016108a2565b6003836003811115612b1257612b12615e43565b141580612bc55750604051632474521560e21b8152600080516020615f2683398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b158015612b8d57600080fd5b505afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc59190615847565b612c1b5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920475541524449414e2063616e2073757370656e642065546f6b656e6044820152607360f81b60648201526084016108a2565b612c2760c9858561411f565b50836001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c84604051612c619190615a96565b60405180910390a250505050565b612c7883613edf565b6101208301518180612c9257506001600160a01b03811633145b612cde5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c696369657360448201526064016108a2565b821580612cf657504284610160015164ffffffffff16115b612d425760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c696379000000000000000060448201526064016108a2565b6040516310f199ef60e31b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063878ccf789060240160006040518083038186803b158015612da357600080fd5b505afa158015612db7573d6000803e3d6000fd5b505050508360200151831115612e085760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b60448201526064016108a2565b600080841190508460a0015160ce6000828254612e259190615da9565b909155506000905080612e3987848861414c565b915091508215612f12576000612e4f88846142a6565b90507f0000000000000000000000000000000000000000000000000000000000000000811115612e8557612e82816144b2565b90505b7f0000000000000000000000000000000000000000000000000000000000000000811115612f0c5760405162461bcd60e51b815260206004820152602e60248201527f446f6e2774206b6e6f7720776865726520746f2074616b65207468652072657360448201526d74206f6620746865206d6f6e657960901b60648201526084016108a2565b50612f1f565b612f1c87826145d1565b90505b612f2881613a76565b6060870151604051634e5de6c960e11b815260048101919091526001600160a01b03851690639cbbcd9290602401600060405180830381600087803b158015612f7057600080fd5b505af1158015612f84573d6000803e3d6000fd5b5050505086600001518761012001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e88604051612fcd91815260200190565b60405180910390a38651600090815260cc602090815260408083208390558951835260cd9091528120908181818181816130078282615655565b505050505050505060008611156131715786516040516331a9108f60e11b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e9161306b9160040190815260200190565b60206040518083038186803b15801561308357600080fd5b505afa158015613097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130bb9190615782565b90506001600160a01b0381163b1561316f5787516040516001600160a01b038316916130f4918a90602401918252602082015260400190565b60408051601f198184030181529181526020820180516001600160e01b031663b104407160e01b179052516131299190615a7a565b6000604051808303816000865af19150503d8060008114613166576040519150601f19603f3d011682016040523d82523d6000602084013e61316b565b606091505b5050505b505b50505050505050565b60008160405160200161318d9190615c4c565b604051602081830303815290604052805190602001209050919050565b8051600090815260cd60205260408120815b6131c660c96133d9565b81101561334f576000806131db60c9846137a0565b909250905060018160038111156131f4576131f4615e43565b1461320057505061333d565b610120860151610160870151604051630cd21c5560e21b81526001600160a01b03928316600482015264ffffffffff90911660248201529083169063334871549060440160206040518083038186803b15801561325c57600080fd5b505afa158015613270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132949190615847565b61329f57505061333d565b6000826001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132da57600080fd5b505afa1580156132ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133129190615864565b9050806133215750505061333d565b61332b8187615d50565b9550613338858483613fab565b505050505b8061334781615e12565b9150506131bc565b5061249d836060015161336185613f45565b8484613fc0565b6040516001600160a01b03808516602483015283166044820152606481018290526133d39085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526148b3565b50505050565b6000610d9f82614985565b60008080806133f38686614990565b9097909650945050505050565b600080808061340f8686614990565b915091508181600381111561342657613426615e43565b9350935050509250929050565b600060d054821161345d578160d060008282546134509190615da9565b9091555060009392505050565b60d0541561347a5760d0546134729083615da9565b600060d05591505b60cf5460ce5411156134d15760cf5460ce546134969190615da9565b82116134ae578160cf60008282546134509190615d50565b60cf5460ce546134be9190615da9565b6134c89083615da9565b60ce5460cf5591505b5090565b60405163c5b8f5cf60e01b8152600080516020615f2683398151915260048201819052600080516020615edf8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561356257600080fd5b505afa158015613171573d6000803e3d6000fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156135a95761249d836149d3565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135e257600080fd5b505afa925050508015613612575060408051601f3d908101601f1916820190925261360f91810190615864565b60015b6136755760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108a2565b600080516020615ebf83398151915281146136e45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108a2565b5061249d838383614a6f565b60335460ff166137395760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108a2565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600061378f8383614a94565b6003811115610d8157610d81615e43565b600080808061340f8686614b0e565b600054610100900460ff166137d65760405162461bcd60e51b81526004016108a290615c01565b565b600054610100900460ff166137ff5760405162461bcd60e51b81526004016108a290615c01565b6137d6614b43565b600054610100900460ff166138225760005460ff1615613826565b303b155b6138425760405162461bcd60e51b81526004016108a290615bb3565b600054610100900460ff16158015613864576000805461ffff19166101011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138bf57600080fd5b505af11580156138d3573d6000803e3d6000fd5b5050505060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561393b57600080fd5b505afa15801561394f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139739190615782565b6001600160a01b0316146139ef5760405162461bcd60e51b815260206004820152603a60248201527f41737365744d616e616765722063616e277420626520736574206265666f726560448201527f20506f6c696379506f6f6c20696e697469616c697a6174696f6e00000000000060648201526084016108a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613a4a57600080fd5b505af1158015613a5e573d6000803e3d6000fd5b5050505080156110a4576000805461ff001916905550565b80613a7e5750565b8060cf5410613aa4578060cf6000828254613a999190615da9565b909155506110a49050565b60cf5415613ac15760cf54613ab99082615da9565b600060cf5590505b8060d06000828254613ad39190615d50565b909155505050565b60335460ff1615613afe5760405162461bcd60e51b81526004016108a290615b89565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586137663390565b80613b3c575050565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015613ba057600080fd5b505afa158015613bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd89190615782565b6001600160a01b031614158015613bf5575080613bf3614b76565b105b15613ceb577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015613c5357600080fd5b505afa158015613c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8b9190615782565b6001600160a01b0316631014a0c2826040518263ffffffff1660e01b8152600401613cb891815260200190565b600060405180830381600087803b158015613cd257600080fd5b505af1158015613ce6573d6000803e3d6000fd5b505050505b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4f57600080fd5b505afa158015613d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d879190615782565b6001600160a01b031614158015613da4575080613da2614b76565b105b15613eab577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b158015613e0257600080fd5b505afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190615782565b6001600160a01b031663ee842dda613e50614b76565b613e5a9084615da9565b6040518263ffffffff1660e01b8152600401613e7891815260200190565b600060405180830381600087803b158015613e9257600080fd5b505af1158015613ea6573d6000803e3d6000fd5b505050505b6108d66001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383614c10565b805115801590613f0657508051600090815260cc6020526040902054613f048261317a565b145b6110a45760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016108a2565b6000610d9f613f9a8360600151846101400151856101600151613f689190615dc0565b64ffffffffff16613f799190615d8a565b610100850151613f94906a1a1601fc4ea7109e000000614c40565b90614d11565b614e11565b6000610d818383614e8f565b6000613fb8848484614eb6565b949350505050565b8382101561401e5760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676874206f6365616e20746f20636f7665722074686520706044820152646f6c69637960d81b60648201526084016108a2565b8360005b61402b836133d9565b81101561410b5760008080614040868561413d565b91509150600161404f876133d9565b6140599190615da9565b8410156140755761406e87613f948b84614c40565b9250614079565b8492505b60405163837c83a360e01b815260048101899052602481018490526001600160a01b0383169063837c83a390604401600060405180830381600087803b1580156140c257600080fd5b505af11580156140d6573d6000803e3d6000fd5b506140e8925088915084905085613fab565b506140f38386615da9565b9450505050808061410390615e12565b915050614022565b505050505050565b6000610d818383614edd565b6000613fb8848484600381111561413857614138615e43565b614eb6565b60008080806133f38686614b0e565b600080600080600086156142465787516040516331a9108f60e11b8152614204916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e916141ae9160040190815260200190565b60206040518083038186803b1580156141c657600080fd5b505afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe9190615782565b87613b33565b858860a00151111561422757858860a001516142209190615da9565b9150614299565b61423f8860a001518761423a9190615da9565b613433565b9250614299565b8760a00151915060ce5460cf5411156142995761427260ce5460cf5461426c9190615da9565b83614ee9565b90508060cf60008282546142869190615da9565b9091555061429690508183615da9565b91505b5090969095509350505050565b600080806142b385613f45565b90506000806142c187614ef8565b8851600090815260cd602052604081209294509092505b6142e1826133d9565b8110156144a5576000806142f5848461413d565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b15801561434357600080fd5b505af1158015614357573d6000803e3d6000fd5b50505060608c015161436b91508290614d11565b90506001600160a01b03821663aa69d74b6143868784614c40565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b1580156143c757600080fd5b505af11580156143db573d6000803e3d6000fd5b5050505060008a11156144905760006143f48b83614c40565b604051630c1ceca560e21b815260048101829052600160248201529091506001600160a01b03841690633073b29490604401602060405180830381600087803b15801561444057600080fd5b505af1158015614454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144789190615864565b6144829082615da9565b61448c908a615d50565b9850505b5050808061449d90615e12565b9150506142d8565b5093979650505050505050565b6000805b6144c060c96133d9565b8110156145ca576000806144d560c9846137a0565b909250905060018160038111156144ee576144ee615e43565b146144fa5750506145b8565b604051630c1ceca560e21b815260048101869052600060248201526001600160a01b03831690633073b29490604401602060405180830381600087803b15801561454357600080fd5b505af1158015614557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061457b9190615864565b6145859086615da9565b94507f000000000000000000000000000000000000000000000000000000000000000085116145b55750506145ca565b50505b806145c281615e12565b9150506144b6565b5090919050565b6000806145dd84613f45565b90506000806145eb86614ef8565b8751600090815260cd602052604081209294509092505b61460b826133d9565b8110156148a75760008061461f848461413d565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b15801561466d57600080fd5b505af1158015614681573d6000803e3d6000fd5b50505060608b015161469591508290614d11565b90506001600160a01b03821663aa69d74b6146b08784614c40565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b1580156146f157600080fd5b505af1158015614705573d6000803e3d6000fd5b5050505060008911801561478957506000826001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561474f57600080fd5b505afa158015614763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147879190615864565b115b156148925760a08a01516000906147a09083614c40565b90506148258a614820856001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156147e257600080fd5b505afa1580156147f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061481a9190615864565b84614ee9565b614ee9565b604051631c0f4f8160e01b8152600481018290529091506001600160a01b03841690631c0f4f8190602401600060405180830381600087803b15801561486a57600080fd5b505af115801561487e573d6000803e3d6000fd5b50505050808a61488e9190615da9565b9950505b5050808061489f90615e12565b915050614602565b50949695505050505050565b6000614908826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614f449092919063ffffffff16565b80519091501561249d57808060200190518101906149269190615847565b61249d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108a2565b6000610d9f82614f53565b6001600160a01b03811660009081526002830160205260408120548190806149c8576149bc8585614edd565b60009250925050612878565b600192509050612878565b6001600160a01b0381163b614a405760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108a2565b600080516020615ebf83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b614a7883614f5d565b600082511180614a855750805b1561249d576133d38383614f9d565b6001600160a01b038116600090815260028301602052604081205480151580614ac25750614ac28484614edd565b610d815760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016108a2565b60008080614b1c8585615091565b6001600160a01b038116600090815260029690960160205260409095205494959350505050565b600054610100900460ff16614b6a5760405162461bcd60e51b81526004016108a290615c01565b6033805460ff19169055565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015614bd857600080fd5b505afa158015614bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e069190615864565b6040516001600160a01b03831660248201526044810182905261249d90849063a9059cbb60e01b9060640161339c565b6000821580614c4d575081155b15614c5a57506000610d9f565b81614c6e6002670de0b6b3a7640000615d68565b614c7a90600019615da9565b614c849190615d68565b831115614cdf5760405162461bcd60e51b8152602060048201526024808201527f7761644d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b670de0b6b3a7640000614cf3600282615d68565b614cfd8486615d8a565b614d079190615d50565b610d819190615d68565b600081614d605760405162461bcd60e51b815260206004820152601860248201527f7761644469763a204469766973696f6e206279207a65726f000000000000000060448201526064016108a2565b6000614d6d600284615d68565b9050670de0b6b3a7640000614d8482600019615da9565b614d8e9190615d68565b841115614de95760405162461bcd60e51b8152602060048201526024808201527f7761644469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b8281614dfd670de0b6b3a764000087615d8a565b614e079190615d50565b613fb89190615d68565b600080614e22633b9aca0084615d8a565b905082614e33633b9aca0083615d68565b14610d9f5760405162461bcd60e51b815260206004820152602660248201527f776164546f5261643a204d617468204d756c7469706c69636174696f6e204f766044820152656572666c6f7760d01b60648201526084016108a2565b6001600160a01b03811660009081526002830160205260408120819055610d81838361509d565b6001600160a01b03821660009081526002840160205260408120829055613fb884846150b2565b6000610d8183836150c7565b60008183106145ca5781610d81565b6000806000614f06846150e9565b90508084610100015110614f3157600181856101000151614f279190615da9565b9250925050915091565b600084610100015182614f279190615da9565b6060613fb88484600085615150565b6000610d9f825490565b614f66816149d3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6150055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016108a2565b600080846001600160a01b0316846040516150209190615a7a565b600060405180830381855af49150503d806000811461505b576040519150601f19603f3d011682016040523d82523d6000602084013e615060565b606091505b50915091506150888282604051806060016040528060278152602001615eff60279139615281565b95945050505050565b6000610d8183836152ba565b6000610d81836001600160a01b0384166152e4565b6000610d81836001600160a01b0384166153d7565b6001600160a01b03811660009081526001830160205260408120541515610d81565b60008082610140015164ffffffffff16426151049190615da9565b9050610d8161514b6e0612d847b578e7643c28ac0000000061514561512887613f45565b6151329086615d8a565b61513f8860600151614e11565b90615426565b906154e1565b6155d5565b6060824710156151b15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108a2565b6001600160a01b0385163b6152085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108a2565b600080866001600160a01b031685876040516152249190615a7a565b60006040518083038185875af1925050503d8060008114615261576040519150601f19603f3d011682016040523d82523d6000602084013e615266565b606091505b5091509150615276828286615281565b979650505050505050565b60608315615290575081610d81565b8251156152a05782518084602001fd5b8160405162461bcd60e51b81526004016108a29190615abe565b60008260000182815481106152d1576152d1615e6f565b9060005260206000200154905092915050565b600081815260018301602052604081205480156153cd576000615308600183615da9565b855490915060009061531c90600190615da9565b905081811461538157600086600001828154811061533c5761533c615e6f565b906000526020600020015490508087600001848154811061535f5761535f615e6f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061539257615392615e59565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d9f565b6000915050610d9f565b600081815260018301602052604081205461541e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d9f565b506000610d9f565b6000821580615433575081155b1561544057506000610d9f565b8161545860026b033b2e3c9fd0803ce8000000615d68565b61546490600019615da9565b61546e9190615d68565b8311156154c95760405162461bcd60e51b8152602060048201526024808201527f7261794d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b6b033b2e3c9fd0803ce8000000614cf3600282615d68565b6000816155305760405162461bcd60e51b815260206004820152601860248201527f7261794469763a204469766973696f6e206279207a65726f000000000000000060448201526064016108a2565b600061553d600284615d68565b90506b033b2e3c9fd0803ce800000061555882600019615da9565b6155629190615d68565b8411156155bd5760405162461bcd60e51b8152602060048201526024808201527f7261794469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b8281614dfd6b033b2e3c9fd0803ce800000087615d8a565b6000806155e76002633b9aca00615d68565b905060006155f58483615d50565b9050818110156156475760405162461bcd60e51b815260206004820181905260248201527f726179546f5761643a204d617468204164646974696f6e204f766572666c6f7760448201526064016108a2565b613fb8633b9aca0082615d68565b50805460008255906000526020600020908101906110a491905b808211156134d1576000815560010161566f565b8035610fc281615e9b565b6000610180828403121561284657600080fd5b600061018082840312156156b457600080fd5b6156bc615cf5565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120615722818401615683565b90820152610140615734838201615750565b90820152610160615746838201615750565b9082015292915050565b803564ffffffffff81168114610fc257600080fd5b60006020828403121561577757600080fd5b8135610d8181615e9b565b60006020828403121561579457600080fd5b8151610d8181615e9b565b600080604083850312156157b257600080fd5b82356157bd81615e9b565b915060208381013567ffffffffffffffff808211156157db57600080fd5b818601915086601f8301126157ef57600080fd5b81358181111561580157615801615e85565b615813601f8201601f19168501615d1f565b9150808252878482850101111561582957600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561585957600080fd5b8151610d8181615eb0565b60006020828403121561587657600080fd5b5051919050565b6000806040838503121561589057600080fd5b823561589b81615e9b565b91506020830135600481106158af57600080fd5b809150509250929050565b600080604083850312156158cd57600080fd5b82356158d881615e9b565b946020939093013593505050565b600061018082840312156158f957600080fd5b610d81838361568e565b6000806101a0838503121561591757600080fd5b615921848461568e565b91506101808301356158af81615eb0565b6000806101a0838503121561594657600080fd5b615950848461568e565b94610180939093013593505050565b6000610180828403121561597257600080fd5b610d8183836156a1565b60008060006101c0848603121561599257600080fd5b61599c85856156a1565b92506101808401356159ad81615e9b565b91506101a08401356bffffffffffffffffffffffff811681146159cf57600080fd5b809150509250925092565b6000602082840312156159ec57600080fd5b5035919050565b60008060408385031215615a0657600080fd5b8235915060208301356158af81615eb0565b60008060408385031215615a2b57600080fd5b8235915060208301356158af81615e9b565b60008060408385031215615a5057600080fd5b50508035926020909101359150565b600060208284031215615a7157600080fd5b610d8182615750565b60008251615a8c818460208701615de6565b9190910192915050565b6020810160048310615ab857634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260008251806020840152615add816040850160208701615de6565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600061018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615cc6828501826001600160a01b03169052565b50506101408381015164ffffffffff81168483015250506101608381015164ffffffffff811684830152610ddf565b604051610180810167ffffffffffffffff81118282101715615d1957615d19615e85565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615d4857615d48615e85565b604052919050565b60008219821115615d6357615d63615e2d565b500190565b600082615d8557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615da457615da4615e2d565b500290565b600082821015615dbb57615dbb615e2d565b500390565b600064ffffffffff83811690831681811015615dde57615dde615e2d565b039392505050565b60005b83811015615e01578181015183820152602001615de9565b838111156133d35750506000910152565b6000600019821415615e2657615e26615e2d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110a457600080fd5b80151581146110a457600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212200c3abb63bcdce5cb9a5a442c9c5a56876d1f9c2ba9d85f6015efec6944b20ae364736f6c63430008060033",
|
|
1254
|
-
"deployedBytecode": "0x6080604052600436106102725760003560e01c806365e29c7e1161014f578063af02808a116100c1578063dea167d51161007a578063dea167d5146107c0578063e5a6b10f146107d5578063e823584a14610808578063f3fef3a31461081d578063f67b2bad1461083d578063fcbb17fe1461085f57600080fd5b8063af02808a146106cc578063b0ec4bcf146106ff578063b63d382e1461071f578063b77ddfea1461073f578063ca143d1814610754578063ce937e7b1461078157600080fd5b8063846253d111610113578063846253d1146105f85780638a9defff146106185780638ca23bc91461063857806398e88ca81461066c5780639e556b2b1461068c578063ab600169146106ac57600080fd5b806365e29c7e1461055257806379502c55146105675780638129fc1c146105ae57806381ced71f146105c35780638456cb59146105e357600080fd5b806343060237116101e8578063536c9a43116101ac578063536c9a431461047d5780635680e145146104925780635b494dd5146104c65780635c975abb146104fa57806363c0f4b11461051d57806365b710081461053257600080fd5b806343060237146103e157806347e7ef24146104015780634a47a3e0146104215780634f1ef2861461045557806352d1902d1461046857600080fd5b806324ea54f41161023a57806324ea54f41461032157806326ccbd22146103435780632a2be82d146103585780633659cfe614610378578063396512fd146103985780633f4ba83a146103cc57600080fd5b8063066dda0e1461027757806319704a3a146102995780631a548a27146102cc5780631c5c4aea146102e1578063220c262b14610301575b600080fd5b34801561028357600080fd5b50610297610292366004615903565b61087f565b005b3480156102a557600080fd5b506102b96102b436600461597c565b6108da565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b5060ce546102b9565b3480156102ed57600080fd5b506102b96102fc3660046159da565b610d88565b34801561030d57600080fd5b506102b961031c366004615a18565b610da5565b34801561032d57600080fd5b506102b9600080516020615f2683398151915281565b34801561034f57600080fd5b506102b9610de7565b34801561036457600080fd5b506102b9610373366004615765565b610e0b565b34801561038457600080fd5b50610297610393366004615765565b610fc7565b3480156103a457600080fd5b506102b97f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d857600080fd5b506102976110a7565b3480156103ed57600080fd5b506102976103fc366004615765565b611154565b34801561040d57600080fd5b5061029761041c3660046158ba565b611567565b34801561042d57600080fd5b506102b97fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b61029761046336600461579f565b6116b9565b34801561047457600080fd5b506102b9611786565b34801561048957600080fd5b5060d0546102b9565b34801561049e57600080fd5b506102b97f2c09deb013d6a86a9063c95b5e2b10937d1128a3937347eb7e00408ed9fb1a9c81565b3480156104d257600080fd5b506102b97f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b34801561050657600080fd5b5060335460ff1660405190151581526020016102c3565b34801561052957600080fd5b506102b9600a81565b34801561053e57600080fd5b5061029761054d366004615765565b611839565b34801561055e57600080fd5b506102b9611a56565b34801561057357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016102c3565b3480156105ba57600080fd5b50610297611b3c565b3480156105cf57600080fd5b506102976105de3660046159da565b611bc5565b3480156105ef57600080fd5b50610297611c40565b34801561060457600080fd5b506102b96106133660046159da565b611cd6565b34801561062457600080fd5b506102976106333660046158e6565b611ecc565b34801561064457600080fd5b506102b97fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b79405781565b34801561067857600080fd5b506102976106873660046158e6565b611f6b565b34801561069857600080fd5b506102976106a7366004615932565b612323565b3480156106b857600080fd5b506102976106c73660046159f3565b612360565b3480156106d857600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610596565b34801561070b57600080fd5b5061059661071a3660046159da565b6124a2565b34801561072b57600080fd5b5061029761073a366004615765565b6124e0565b34801561074b57600080fd5b506102b961278f565b34801561076057600080fd5b5061077461076f366004615765565b61284c565b6040516102c39190615a96565b34801561078d57600080fd5b506107a161079c366004615a3d565b612859565b604080516001600160a01b0390931683526020830191909152016102c3565b3480156107cc57600080fd5b506102b961287f565b3480156107e157600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610596565b34801561081457600080fd5b5060cf546102b9565b34801561082957600080fd5b506102b96108383660046158ba565b61288b565b34801561084957600080fd5b506102b9600080516020615edf83398151915281565b34801561086b57600080fd5b5061029761087a36600461587d565b612a01565b60335460ff16156108ab5760405162461bcd60e51b81526004016108a290615b89565b60405180910390fd5b6108d66108bd3684900384018461595f565b826108c95760006108cf565b83602001355b6000612c6f565b5050565b60006108e860335460ff1690565b156109055760405162461bcd60e51b81526004016108a290615b89565b6101208401516001600160a01b038116331461096f5760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b60648201526084016108a2565b604051635dfdc5d760e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063bbfb8bae9060240160006040518083038186803b1580156109d057600080fd5b505afa1580156109e4573d6000803e3d6000fd5b50505050826bffffffffffffffffffffffff166060826001600160a01b0316901b610a0f9190615d50565b8552610a1a8561317a565b8551600090815260cc602052604081209190915560a086015160ce805491929091610a46908490615d50565b90915550610a559050856131aa565b8451604051632851206560e21b81526001600160a01b03868116600483015260248201929092527f00000000000000000000000000000000000000000000000000000000000000009091169063a144819490604401600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b50505050610b2884308761010001518860a00151610af69190615d50565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613368565b610bf4847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd9190615782565b60c08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613368565b60008560e00151118015610c8a5750806001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c3c57600080fd5b505afa158015610c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c749190615782565b6001600160a01b0316846001600160a01b031614155b15610d3b57610d3b84826001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610ccc57600080fd5b505afa158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d049190615782565b60e08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613368565b806001600160a01b03167ff8da20dc84e4c9850943fcd1a0587142b2bac3fef70840ccee41f5edd22bc47786604051610d749190615c4c565b60405180910390a2505082515b9392505050565b600081815260cd60205260408120610d9f906133d9565b92915050565b600082815260cd6020526040812081908190610dc190856133e4565b915091508115610dd4579150610d9f9050565b600092505050610d9f565b505092915050565b600060cf5460d05460ce54610dfc9190615d50565b610e069190615da9565b905090565b6000610e1960335460ff1690565b15610e365760405162461bcd60e51b81526004016108a290615b89565b600080610e4460c985613400565b91509150818015610e8157506001816003811115610e6457610e64615e43565b1480610e8157506002816003811115610e7f57610e7f615e43565b145b610ec45760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108a2565b6000846001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190615864565b90506000610f4482613433565b90506001600160a01b038616631c0f4f81610f5f8385615da9565b6040518263ffffffff1660e01b8152600401610f7d91815260200190565b600060405180830381600087803b158015610f9757600080fd5b505af1158015610fab573d6000803e3d6000fd5b505050508082610fbb9190615da9565b9450505050505b919050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110105760405162461bcd60e51b81526004016108a290615af1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611059600080516020615ebf833981519152546001600160a01b031690565b6001600160a01b03161461107f5760405162461bcd60e51b81526004016108a290615b3d565b611088816134d5565b604080516000808252602082019092526110a491839190613576565b50565b60405163c5b8f5cf60e01b8152600080516020615f2683398151915260048201819052600080516020615edf8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561113457600080fd5b505afa158015611148573d6000803e3d6000fd5b505050506108d66136f0565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111e65760405162461bcd60e51b815260206004820152603160248201527f4f6e6c792074686520506f6c696379506f6f6c436f6e6669672063616e20636860448201527030b733b29030b9b9b2ba26b0b730b3b2b960791b60648201526084016108a2565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561124a57600080fd5b505afa15801561125e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112829190615782565b6001600160a01b0316146114b5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e957600080fd5b505afa1580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190615782565b6001600160a01b031663cec16f3f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561135b57600080fd5b505af115801561136f573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156113fb57600080fd5b505afa15801561140f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114339190615782565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401602060405180830381600087803b15801561147b57600080fd5b505af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190615847565b505b6001600160a01b038116156110a45760405163095ea7b360e01b81526001600160a01b03828116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b15801561152f57600080fd5b505af1158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190615847565b60335460ff161561158a5760405162461bcd60e51b81526004016108a290615b89565b60008061159860c985613400565b915091508180156115ba575060018160038111156115b8576115b8615e43565b145b6115fd5760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b60448201526064016108a2565b6116326001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086613368565b6040516311f9fbc960e21b8152336004820152602481018490526001600160a01b038516906347e7ef2490604401602060405180830381600087803b15801561167a57600080fd5b505af115801561168e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b29190615864565b5050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117025760405162461bcd60e51b81526004016108a290615af1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661174b600080516020615ebf833981519152546001600160a01b031690565b6001600160a01b0316146117715760405162461bcd60e51b81526004016108a290615b3d565b61177a826134d5565b6108d682826001613576565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118265760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108a2565b50600080516020615ebf83398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b1580156118c157600080fd5b505afa1580156118d5573d6000803e3d6000fd5b50600292506118e2915050565b6118ed60c984613783565b60038111156118fe576118fe615e43565b146119435760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b60448201526064016108a2565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190615864565b15611a105760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b60648201526084016108a2565b816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c6000604051611a4a9190615a96565b60405180910390a25050565b600080805b611a6560c96133d9565b811015611b0d576000611a7960c9836137a0565b509050806001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab557600080fd5b505afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed9190615864565b611af79084615d50565b9250508080611b0590615e12565b915050611a5b565b506000611b18610de7565b905081811115611b3357611b2c8282615da9565b9250505090565b60009250505090565b600054610100900460ff16611b575760005460ff1615611b5b565b303b155b611b775760405162461bcd60e51b81526004016108a290615bb3565b600054610100900460ff16158015611b99576000805461ffff19166101011790555b611ba16137af565b611ba96137d8565b611bb1613807565b80156110a4576000805461ff001916905550565b611bfa6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084613368565b611c0381613a76565b6040805160018152602081018390527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a150565b6040516312d9a6ad60e01b8152600080516020615f2683398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611cb657600080fd5b505afa158015611cca573d6000803e3d6000fd5b505050506110a4613adb565b6040516312d9a6ad60e01b81527fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b794057600482018190523360248301526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312d9a6ad9060440160006040518083038186803b158015611d6057600080fd5b505afa158015611d74573d6000803e3d6000fd5b5050505060d054831115611d885760d05492505b60008311611dd85760405162461bcd60e51b815260206004820152601760248201527f4e6f207072656d69756d7320746f20776974686472617700000000000000000060448201526064016108a2565b8260d06000828254611dea9190615da9565b92505081905550611e8b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4d57600080fd5b505afa158015611e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e859190615782565b84613b33565b6040805160008152602081018590527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a15090919050565b60335460ff1615611eef5760405162461bcd60e51b81526004016108a290615b89565b42611f0261018083016101608401615a5f565b64ffffffffff161115611f505760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b60448201526064016108a2565b6110a4611f623683900383018361595f565b60006001612c6f565b6040516312d9a6ad60e01b81527f2c09deb013d6a86a9063c95b5e2b10937d1128a3937347eb7e00408ed9fb1a9c60048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611ff357600080fd5b505afa158015612007573d6000803e3d6000fd5b5050505061201760335460ff1690565b156120345760405162461bcd60e51b81526004016108a290615b89565b61204b6120463684900384018461595f565b613edf565b8135600090815260cd6020526040812090805b61206860c96133d9565b8110156122b25760008061207d60c9846137a0565b90925090506000808061209088866133e4565b91509150811561211a576001600160a01b038516634438bcbb6120c06120bb368e90038e018e61595f565b613f45565b836040518363ffffffff1660e01b81526004016120e7929190918252602082015260400190565b600060405180830381600087803b15801561210157600080fd5b505af1158015612115573d6000803e3d6000fd5b505050505b600184600381111561212e5761212e615e43565b1480156121ec57506001600160a01b03851663334871546121576101408d016101208e01615765565b6121696101808e016101608f01615a5f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015264ffffffffff16602482015260440160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ec9190615847565b1561226557846001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561222a57600080fd5b505afa15801561223e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122629190615864565b92505b8261228157811561227c5761227a8886613f9f565b505b61229a565b61228c888685613fab565b506122978388615d50565b96505b505050505080806122aa90615e12565b91505061205e565b506122d460608501356122cd6120bb3688900388018861595f565b8385613fc0565b83356122e861014086016101208701615765565b6001600160a01b03167f5b6693e57e2edc10453988a22e50a605795daee9a5dde66f5267b0dee0a6b60660405160405180910390a350505050565b60335460ff16156123465760405162461bcd60e51b81526004016108a290615b89565b6108d66123583684900384018461595f565b826000612c6f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b957600080fd5b505afa1580156123cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f19190615782565b6001600160a01b0316336001600160a01b0316146124625760405162461bcd60e51b815260206004820152602860248201527f4f6e6c792061737365744d616e616765722063616e2063616c6c207468697320604482015267333ab731ba34b7b760c11b60648201526084016108a2565b60335460ff16156124855760405162461bcd60e51b81526004016108a290615b89565b8015612494576108d682613a76565b61249d82613433565b505050565b600080806124b160c9856137a0565b909250905060008160038111156124ca576124ca615e43565b146124d6575092915050565b5060009392505050565b6040516312d9a6ad60e01b8152600080516020615edf83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561255657600080fd5b505afa15801561256a573d6000803e3d6000fd5b50505050600a61257a60c96133d9565b106125d15760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d206e756d626572206f662045546f6b656e73207265616368656044820152601960fa1b60648201526084016108a2565b6125dc60c983614113565b156126295760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c00000000000060448201526064016108a2565b6001600160a01b0382166126765760405162461bcd60e51b815260206004820152601460248201527365546f6b656e2063616e2774206265207a65726f60601b60448201526064016108a2565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b1580156126b957600080fd5b505afa1580156126cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f19190615782565b6001600160a01b0316146127475760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c000060448201526064016108a2565b61275460c983600161411f565b50816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c6001604051611a4a9190615a96565b600080805b61279e60c96133d9565b8110156128465760006127b260c9836137a0565b509050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156127ee57600080fd5b505afa158015612802573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128269190615864565b6128309084615d50565b925050808061283e90615e12565b915050612794565b50919050565b6000610d9f60c983613783565b600082815260cd602052604081208190612873908461413d565b915091505b9250929050565b6000610e0660c96133d9565b600061289960335460ff1690565b156128b65760405162461bcd60e51b81526004016108a290615b89565b6000806128c460c986613400565b91509150818015612901575060018160038111156128e4576128e4615e43565b1480612901575060028160038111156128ff576128ff615e43565b145b61295f5760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b60648201526084016108a2565b60405163f3fef3a360e01b8152336004820181905260248201869052906000906001600160a01b0388169063f3fef3a390604401602060405180830381600087803b1580156129ad57600080fd5b505af11580156129c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e59190615864565b905080156129f7576129f78282613b33565b9695505050505050565b60405163c5b8f5cf60e01b8152600080516020615f2683398151915260048201819052600080516020615edf8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b158015612a8e57600080fd5b505afa158015612aa2573d6000803e3d6000fd5b50505050612aba8460c961411390919063ffffffff16565b612afe5760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b60448201526064016108a2565b6003836003811115612b1257612b12615e43565b141580612bc55750604051632474521560e21b8152600080516020615f2683398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b158015612b8d57600080fd5b505afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc59190615847565b612c1b5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920475541524449414e2063616e2073757370656e642065546f6b656e6044820152607360f81b60648201526084016108a2565b612c2760c9858561411f565b50836001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c84604051612c619190615a96565b60405180910390a250505050565b612c7883613edf565b6101208301518180612c9257506001600160a01b03811633145b612cde5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c696369657360448201526064016108a2565b821580612cf657504284610160015164ffffffffff16115b612d425760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c696379000000000000000060448201526064016108a2565b6040516310f199ef60e31b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063878ccf789060240160006040518083038186803b158015612da357600080fd5b505afa158015612db7573d6000803e3d6000fd5b505050508360200151831115612e085760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b60448201526064016108a2565b600080841190508460a0015160ce6000828254612e259190615da9565b909155506000905080612e3987848861414c565b915091508215612f12576000612e4f88846142a6565b90507f0000000000000000000000000000000000000000000000000000000000000000811115612e8557612e82816144b2565b90505b7f0000000000000000000000000000000000000000000000000000000000000000811115612f0c5760405162461bcd60e51b815260206004820152602e60248201527f446f6e2774206b6e6f7720776865726520746f2074616b65207468652072657360448201526d74206f6620746865206d6f6e657960901b60648201526084016108a2565b50612f1f565b612f1c87826145d1565b90505b612f2881613a76565b6060870151604051634e5de6c960e11b815260048101919091526001600160a01b03851690639cbbcd9290602401600060405180830381600087803b158015612f7057600080fd5b505af1158015612f84573d6000803e3d6000fd5b5050505086600001518761012001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e88604051612fcd91815260200190565b60405180910390a38651600090815260cc602090815260408083208390558951835260cd9091528120908181818181816130078282615655565b505050505050505060008611156131715786516040516331a9108f60e11b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e9161306b9160040190815260200190565b60206040518083038186803b15801561308357600080fd5b505afa158015613097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130bb9190615782565b90506001600160a01b0381163b1561316f5787516040516001600160a01b038316916130f4918a90602401918252602082015260400190565b60408051601f198184030181529181526020820180516001600160e01b031663b104407160e01b179052516131299190615a7a565b6000604051808303816000865af19150503d8060008114613166576040519150601f19603f3d011682016040523d82523d6000602084013e61316b565b606091505b5050505b505b50505050505050565b60008160405160200161318d9190615c4c565b604051602081830303815290604052805190602001209050919050565b8051600090815260cd60205260408120815b6131c660c96133d9565b81101561334f576000806131db60c9846137a0565b909250905060018160038111156131f4576131f4615e43565b1461320057505061333d565b610120860151610160870151604051630cd21c5560e21b81526001600160a01b03928316600482015264ffffffffff90911660248201529083169063334871549060440160206040518083038186803b15801561325c57600080fd5b505afa158015613270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132949190615847565b61329f57505061333d565b6000826001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132da57600080fd5b505afa1580156132ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133129190615864565b9050806133215750505061333d565b61332b8187615d50565b9550613338858483613fab565b505050505b8061334781615e12565b9150506131bc565b5061249d836060015161336185613f45565b8484613fc0565b6040516001600160a01b03808516602483015283166044820152606481018290526133d39085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526148b3565b50505050565b6000610d9f82614985565b60008080806133f38686614990565b9097909650945050505050565b600080808061340f8686614990565b915091508181600381111561342657613426615e43565b9350935050509250929050565b600060d054821161345d578160d060008282546134509190615da9565b9091555060009392505050565b60d0541561347a5760d0546134729083615da9565b600060d05591505b60cf5460ce5411156134d15760cf5460ce546134969190615da9565b82116134ae578160cf60008282546134509190615d50565b60cf5460ce546134be9190615da9565b6134c89083615da9565b60ce5460cf5591505b5090565b60405163c5b8f5cf60e01b8152600080516020615f2683398151915260048201819052600080516020615edf8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561356257600080fd5b505afa158015613171573d6000803e3d6000fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156135a95761249d836149d3565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156135e257600080fd5b505afa925050508015613612575060408051601f3d908101601f1916820190925261360f91810190615864565b60015b6136755760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108a2565b600080516020615ebf83398151915281146136e45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108a2565b5061249d838383614a6f565b60335460ff166137395760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108a2565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600061378f8383614a94565b6003811115610d8157610d81615e43565b600080808061340f8686614b0e565b600054610100900460ff166137d65760405162461bcd60e51b81526004016108a290615c01565b565b600054610100900460ff166137ff5760405162461bcd60e51b81526004016108a290615c01565b6137d6614b43565b600054610100900460ff166138225760005460ff1615613826565b303b155b6138425760405162461bcd60e51b81526004016108a290615bb3565b600054610100900460ff16158015613864576000805461ffff19166101011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156138bf57600080fd5b505af11580156138d3573d6000803e3d6000fd5b5050505060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561393b57600080fd5b505afa15801561394f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139739190615782565b6001600160a01b0316146139ef5760405162461bcd60e51b815260206004820152603a60248201527f41737365744d616e616765722063616e277420626520736574206265666f726560448201527f20506f6c696379506f6f6c20696e697469616c697a6174696f6e00000000000060648201526084016108a2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613a4a57600080fd5b505af1158015613a5e573d6000803e3d6000fd5b5050505080156110a4576000805461ff001916905550565b80613a7e5750565b8060cf5410613aa4578060cf6000828254613a999190615da9565b909155506110a49050565b60cf5415613ac15760cf54613ab99082615da9565b600060cf5590505b8060d06000828254613ad39190615d50565b909155505050565b60335460ff1615613afe5760405162461bcd60e51b81526004016108a290615b89565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586137663390565b80613b3c575050565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015613ba057600080fd5b505afa158015613bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd89190615782565b6001600160a01b031614158015613bf5575080613bf3614b76565b105b15613ceb577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015613c5357600080fd5b505afa158015613c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8b9190615782565b6001600160a01b0316631014a0c2826040518263ffffffff1660e01b8152600401613cb891815260200190565b600060405180830381600087803b158015613cd257600080fd5b505af1158015613ce6573d6000803e3d6000fd5b505050505b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4f57600080fd5b505afa158015613d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d879190615782565b6001600160a01b031614158015613da4575080613da2614b76565b105b15613eab577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b158015613e0257600080fd5b505afa158015613e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3a9190615782565b6001600160a01b031663ee842dda613e50614b76565b613e5a9084615da9565b6040518263ffffffff1660e01b8152600401613e7891815260200190565b600060405180830381600087803b158015613e9257600080fd5b505af1158015613ea6573d6000803e3d6000fd5b505050505b6108d66001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383614c10565b805115801590613f0657508051600090815260cc6020526040902054613f048261317a565b145b6110a45760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b60448201526064016108a2565b6000610d9f613f9a8360600151846101400151856101600151613f689190615dc0565b64ffffffffff16613f799190615d8a565b610100850151613f94906a1a1601fc4ea7109e000000614c40565b90614d11565b614e11565b6000610d818383614e8f565b6000613fb8848484614eb6565b949350505050565b8382101561401e5760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676874206f6365616e20746f20636f7665722074686520706044820152646f6c69637960d81b60648201526084016108a2565b8360005b61402b836133d9565b81101561410b5760008080614040868561413d565b91509150600161404f876133d9565b6140599190615da9565b8410156140755761406e87613f948b84614c40565b9250614079565b8492505b60405163837c83a360e01b815260048101899052602481018490526001600160a01b0383169063837c83a390604401600060405180830381600087803b1580156140c257600080fd5b505af11580156140d6573d6000803e3d6000fd5b506140e8925088915084905085613fab565b506140f38386615da9565b9450505050808061410390615e12565b915050614022565b505050505050565b6000610d818383614edd565b6000613fb8848484600381111561413857614138615e43565b614eb6565b60008080806133f38686614b0e565b600080600080600086156142465787516040516331a9108f60e11b8152614204916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e916141ae9160040190815260200190565b60206040518083038186803b1580156141c657600080fd5b505afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe9190615782565b87613b33565b858860a00151111561422757858860a001516142209190615da9565b9150614299565b61423f8860a001518761423a9190615da9565b613433565b9250614299565b8760a00151915060ce5460cf5411156142995761427260ce5460cf5461426c9190615da9565b83614ee9565b90508060cf60008282546142869190615da9565b9091555061429690508183615da9565b91505b5090969095509350505050565b600080806142b385613f45565b90506000806142c187614ef8565b8851600090815260cd602052604081209294509092505b6142e1826133d9565b8110156144a5576000806142f5848461413d565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b15801561434357600080fd5b505af1158015614357573d6000803e3d6000fd5b50505060608c015161436b91508290614d11565b90506001600160a01b03821663aa69d74b6143868784614c40565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b1580156143c757600080fd5b505af11580156143db573d6000803e3d6000fd5b5050505060008a11156144905760006143f48b83614c40565b604051630c1ceca560e21b815260048101829052600160248201529091506001600160a01b03841690633073b29490604401602060405180830381600087803b15801561444057600080fd5b505af1158015614454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144789190615864565b6144829082615da9565b61448c908a615d50565b9850505b5050808061449d90615e12565b9150506142d8565b5093979650505050505050565b6000805b6144c060c96133d9565b8110156145ca576000806144d560c9846137a0565b909250905060018160038111156144ee576144ee615e43565b146144fa5750506145b8565b604051630c1ceca560e21b815260048101869052600060248201526001600160a01b03831690633073b29490604401602060405180830381600087803b15801561454357600080fd5b505af1158015614557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061457b9190615864565b6145859086615da9565b94507f000000000000000000000000000000000000000000000000000000000000000085116145b55750506145ca565b50505b806145c281615e12565b9150506144b6565b5090919050565b6000806145dd84613f45565b90506000806145eb86614ef8565b8751600090815260cd602052604081209294509092505b61460b826133d9565b8110156148a75760008061461f848461413d565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b15801561466d57600080fd5b505af1158015614681573d6000803e3d6000fd5b50505060608b015161469591508290614d11565b90506001600160a01b03821663aa69d74b6146b08784614c40565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b1580156146f157600080fd5b505af1158015614705573d6000803e3d6000fd5b5050505060008911801561478957506000826001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561474f57600080fd5b505afa158015614763573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147879190615864565b115b156148925760a08a01516000906147a09083614c40565b90506148258a614820856001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156147e257600080fd5b505afa1580156147f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061481a9190615864565b84614ee9565b614ee9565b604051631c0f4f8160e01b8152600481018290529091506001600160a01b03841690631c0f4f8190602401600060405180830381600087803b15801561486a57600080fd5b505af115801561487e573d6000803e3d6000fd5b50505050808a61488e9190615da9565b9950505b5050808061489f90615e12565b915050614602565b50949695505050505050565b6000614908826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614f449092919063ffffffff16565b80519091501561249d57808060200190518101906149269190615847565b61249d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108a2565b6000610d9f82614f53565b6001600160a01b03811660009081526002830160205260408120548190806149c8576149bc8585614edd565b60009250925050612878565b600192509050612878565b6001600160a01b0381163b614a405760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108a2565b600080516020615ebf83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b614a7883614f5d565b600082511180614a855750805b1561249d576133d38383614f9d565b6001600160a01b038116600090815260028301602052604081205480151580614ac25750614ac28484614edd565b610d815760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b6579000060448201526064016108a2565b60008080614b1c8585615091565b6001600160a01b038116600090815260029690960160205260409095205494959350505050565b600054610100900460ff16614b6a5760405162461bcd60e51b81526004016108a290615c01565b6033805460ff19169055565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015614bd857600080fd5b505afa158015614bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e069190615864565b6040516001600160a01b03831660248201526044810182905261249d90849063a9059cbb60e01b9060640161339c565b6000821580614c4d575081155b15614c5a57506000610d9f565b81614c6e6002670de0b6b3a7640000615d68565b614c7a90600019615da9565b614c849190615d68565b831115614cdf5760405162461bcd60e51b8152602060048201526024808201527f7761644d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b670de0b6b3a7640000614cf3600282615d68565b614cfd8486615d8a565b614d079190615d50565b610d819190615d68565b600081614d605760405162461bcd60e51b815260206004820152601860248201527f7761644469763a204469766973696f6e206279207a65726f000000000000000060448201526064016108a2565b6000614d6d600284615d68565b9050670de0b6b3a7640000614d8482600019615da9565b614d8e9190615d68565b841115614de95760405162461bcd60e51b8152602060048201526024808201527f7761644469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b8281614dfd670de0b6b3a764000087615d8a565b614e079190615d50565b613fb89190615d68565b600080614e22633b9aca0084615d8a565b905082614e33633b9aca0083615d68565b14610d9f5760405162461bcd60e51b815260206004820152602660248201527f776164546f5261643a204d617468204d756c7469706c69636174696f6e204f766044820152656572666c6f7760d01b60648201526084016108a2565b6001600160a01b03811660009081526002830160205260408120819055610d81838361509d565b6001600160a01b03821660009081526002840160205260408120829055613fb884846150b2565b6000610d8183836150c7565b60008183106145ca5781610d81565b6000806000614f06846150e9565b90508084610100015110614f3157600181856101000151614f279190615da9565b9250925050915091565b600084610100015182614f279190615da9565b6060613fb88484600085615150565b6000610d9f825490565b614f66816149d3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6150055760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016108a2565b600080846001600160a01b0316846040516150209190615a7a565b600060405180830381855af49150503d806000811461505b576040519150601f19603f3d011682016040523d82523d6000602084013e615060565b606091505b50915091506150888282604051806060016040528060278152602001615eff60279139615281565b95945050505050565b6000610d8183836152ba565b6000610d81836001600160a01b0384166152e4565b6000610d81836001600160a01b0384166153d7565b6001600160a01b03811660009081526001830160205260408120541515610d81565b60008082610140015164ffffffffff16426151049190615da9565b9050610d8161514b6e0612d847b578e7643c28ac0000000061514561512887613f45565b6151329086615d8a565b61513f8860600151614e11565b90615426565b906154e1565b6155d5565b6060824710156151b15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108a2565b6001600160a01b0385163b6152085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108a2565b600080866001600160a01b031685876040516152249190615a7a565b60006040518083038185875af1925050503d8060008114615261576040519150601f19603f3d011682016040523d82523d6000602084013e615266565b606091505b5091509150615276828286615281565b979650505050505050565b60608315615290575081610d81565b8251156152a05782518084602001fd5b8160405162461bcd60e51b81526004016108a29190615abe565b60008260000182815481106152d1576152d1615e6f565b9060005260206000200154905092915050565b600081815260018301602052604081205480156153cd576000615308600183615da9565b855490915060009061531c90600190615da9565b905081811461538157600086600001828154811061533c5761533c615e6f565b906000526020600020015490508087600001848154811061535f5761535f615e6f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061539257615392615e59565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d9f565b6000915050610d9f565b600081815260018301602052604081205461541e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d9f565b506000610d9f565b6000821580615433575081155b1561544057506000610d9f565b8161545860026b033b2e3c9fd0803ce8000000615d68565b61546490600019615da9565b61546e9190615d68565b8311156154c95760405162461bcd60e51b8152602060048201526024808201527f7261794d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b6b033b2e3c9fd0803ce8000000614cf3600282615d68565b6000816155305760405162461bcd60e51b815260206004820152601860248201527f7261794469763a204469766973696f6e206279207a65726f000000000000000060448201526064016108a2565b600061553d600284615d68565b90506b033b2e3c9fd0803ce800000061555882600019615da9565b6155629190615d68565b8411156155bd5760405162461bcd60e51b8152602060048201526024808201527f7261794469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b60648201526084016108a2565b8281614dfd6b033b2e3c9fd0803ce800000087615d8a565b6000806155e76002633b9aca00615d68565b905060006155f58483615d50565b9050818110156156475760405162461bcd60e51b815260206004820181905260248201527f726179546f5761643a204d617468204164646974696f6e204f766572666c6f7760448201526064016108a2565b613fb8633b9aca0082615d68565b50805460008255906000526020600020908101906110a491905b808211156134d1576000815560010161566f565b8035610fc281615e9b565b6000610180828403121561284657600080fd5b600061018082840312156156b457600080fd5b6156bc615cf5565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120615722818401615683565b90820152610140615734838201615750565b90820152610160615746838201615750565b9082015292915050565b803564ffffffffff81168114610fc257600080fd5b60006020828403121561577757600080fd5b8135610d8181615e9b565b60006020828403121561579457600080fd5b8151610d8181615e9b565b600080604083850312156157b257600080fd5b82356157bd81615e9b565b915060208381013567ffffffffffffffff808211156157db57600080fd5b818601915086601f8301126157ef57600080fd5b81358181111561580157615801615e85565b615813601f8201601f19168501615d1f565b9150808252878482850101111561582957600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561585957600080fd5b8151610d8181615eb0565b60006020828403121561587657600080fd5b5051919050565b6000806040838503121561589057600080fd5b823561589b81615e9b565b91506020830135600481106158af57600080fd5b809150509250929050565b600080604083850312156158cd57600080fd5b82356158d881615e9b565b946020939093013593505050565b600061018082840312156158f957600080fd5b610d81838361568e565b6000806101a0838503121561591757600080fd5b615921848461568e565b91506101808301356158af81615eb0565b6000806101a0838503121561594657600080fd5b615950848461568e565b94610180939093013593505050565b6000610180828403121561597257600080fd5b610d8183836156a1565b60008060006101c0848603121561599257600080fd5b61599c85856156a1565b92506101808401356159ad81615e9b565b91506101a08401356bffffffffffffffffffffffff811681146159cf57600080fd5b809150509250925092565b6000602082840312156159ec57600080fd5b5035919050565b60008060408385031215615a0657600080fd5b8235915060208301356158af81615eb0565b60008060408385031215615a2b57600080fd5b8235915060208301356158af81615e9b565b60008060408385031215615a5057600080fd5b50508035926020909101359150565b600060208284031215615a7157600080fd5b610d8182615750565b60008251615a8c818460208701615de6565b9190910192915050565b6020810160048310615ab857634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260008251806020840152615add816040850160208701615de6565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600061018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615cc6828501826001600160a01b03169052565b50506101408381015164ffffffffff81168483015250506101608381015164ffffffffff811684830152610ddf565b604051610180810167ffffffffffffffff81118282101715615d1957615d19615e85565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615d4857615d48615e85565b604052919050565b60008219821115615d6357615d63615e2d565b500190565b600082615d8557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615da457615da4615e2d565b500290565b600082821015615dbb57615dbb615e2d565b500390565b600064ffffffffff83811690831681811015615dde57615dde615e2d565b039392505050565b60005b83811015615e01578181015183820152602001615de9565b838111156133d35750506000910152565b6000600019821415615e2657615e26615e2d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110a457600080fd5b80151581146110a457600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a26469706673582212200c3abb63bcdce5cb9a5a442c9c5a56876d1f9c2ba9d85f6015efec6944b20ae364736f6c63430008060033",
|
|
1165
|
+
"bytecode": "0x6101206040523060601b6080523480156200001957600080fd5b50604051620060a2380380620060a28339810160408190526200003c9162000105565b6001600160601b0319606084811b821660c05283811b82166101005282901b1660e0526040805163313ce56760e01b815290516003916001600160a01b0384169163313ce56791600480820192602092909190829003018186803b158015620000a457600080fd5b505afa158015620000b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000df919062000159565b620000eb91906200028f565b620000f890600a620001ce565b60a05250620002e4915050565b6000806000606084860312156200011b57600080fd5b83516200012881620002cb565b60208501519093506200013b81620002cb565b60408501519092506200014e81620002cb565b809150509250925092565b6000602082840312156200016c57600080fd5b815160ff811681146200017e57600080fd5b9392505050565b600181815b80851115620001c6578160001904821115620001aa57620001aa620002b5565b80851615620001b857918102915b93841c93908002906200018a565b509250929050565b60006200017e60ff841683600082620001ea5750600162000289565b81620001f95750600062000289565b81600181146200021257600281146200021d576200023d565b600191505062000289565b60ff841115620002315762000231620002b5565b50506001821b62000289565b5060208310610133831016604e8410600b841016171562000262575081810a62000289565b6200026e838362000185565b8060001904821115620002855762000285620002b5565b0290505b92915050565b600060ff821660ff841680821015620002ac57620002ac620002b5565b90039392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114620002e157600080fd5b50565b60805160601c60a05160c05160601c60e05160601c6101005160601c615c39620004696000396000818161067101528181610a140152818161349201528181613a52015281816141a701526143a501526000818161077a01528181610a9601528181610b6201528181610ca90152818161130b01528181611481015281816115a001528181611b6801528181613959015261496701526000818161052c0152818161092401528181610ac401528181611088015281816110f501528181611189015281816112280152818161133a0152818161180d01528181611c0201528181611cb401528181611d8c01528181611f40015281816120ea0152818161262a015281816127210152818161293f01528181612fc10152818161330701528181613385015281816135ea0152818161369d01528181613799015261384c01526000818161039401528181612a3101528181612a650152613e64015260008181610f6801528181610fa80152818161165a0152818161169a01526117290152615c396000f3fe60806040526004361061025c5760003560e01c806365e29c7e11610144578063b0ec4bcf116100b6578063dea167d51161007a578063dea167d514610756578063e5a6b10f1461076b578063e823584a1461079e578063f3fef3a3146107b3578063f67b2bad146107d3578063fcbb17fe146107f557600080fd5b8063b0ec4bcf14610695578063b63d382e146106b5578063b77ddfea146106d5578063ca143d18146106ea578063ce937e7b1461071757600080fd5b8063846253d111610108578063846253d1146105ae5780638a9defff146105ce5780638ca23bc9146105ee5780639e556b2b14610622578063ab60016914610642578063af02808a1461066257600080fd5b806365e29c7e1461050857806379502c551461051d5780638129fc1c1461056457806381ced71f146105795780638456cb591461059957600080fd5b80633f4ba83a116101dd57806352d1902d116101a157806352d1902d14610452578063536c9a43146104675780635b494dd51461047c5780635c975abb146104b057806363c0f4b1146104d357806365b71008146104e857600080fd5b80633f4ba83a146103b657806343060237146103cb57806347e7ef24146103eb5780634a47a3e01461040b5780634f1ef2861461043f57600080fd5b806324ea54f41161022457806324ea54f41461030b57806326ccbd221461032d5780632a2be82d146103425780633659cfe614610362578063396512fd1461038257600080fd5b8063066dda0e1461026157806319704a3a146102835780631a548a27146102b65780631c5c4aea146102cb578063220c262b146102eb575b600080fd5b34801561026d57600080fd5b5061028161027c3660046155d7565b610815565b005b34801561028f57600080fd5b506102a361029e366004615650565b610870565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b5060ce546102a3565b3480156102d757600080fd5b506102a36102e63660046156ae565b610d1e565b3480156102f757600080fd5b506102a36103063660046156ec565b610d3b565b34801561031757600080fd5b506102a3600080516020615be483398151915281565b34801561033957600080fd5b506102a3610d7d565b34801561034e57600080fd5b506102a361035d36600461540f565b610da1565b34801561036e57600080fd5b5061028161037d36600461540f565b610f5d565b34801561038e57600080fd5b506102a37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c257600080fd5b5061028161103d565b3480156103d757600080fd5b506102816103e636600461540f565b6110ea565b3480156103f757600080fd5b5061028161040636600461558e565b6114fd565b34801561041757600080fd5b506102a37fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b61028161044d366004615449565b61164f565b34801561045e57600080fd5b506102a361171c565b34801561047357600080fd5b5060d0546102a3565b34801561048857600080fd5b506102a37f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156104bc57600080fd5b5060335460ff1660405190151581526020016102ad565b3480156104df57600080fd5b506102a3600a81565b3480156104f457600080fd5b5061028161050336600461540f565b6117cf565b34801561051457600080fd5b506102a36119ec565b34801561052957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016102ad565b34801561057057600080fd5b50610281611ad2565b34801561058557600080fd5b506102816105943660046156ae565b611b5b565b3480156105a557600080fd5b50610281611bd6565b3480156105ba57600080fd5b506102a36105c93660046156ae565b611c6c565b3480156105da57600080fd5b506102816105e93660046155ba565b611e62565b3480156105fa57600080fd5b506102a37fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b79405781565b34801561062e57600080fd5b5061028161063d366004615606565b611f01565b34801561064e57600080fd5b5061028161065d3660046156c7565b611f3e565b34801561066e57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061054c565b3480156106a157600080fd5b5061054c6106b03660046156ae565b612080565b3480156106c157600080fd5b506102816106d036600461540f565b6120be565b3480156106e157600080fd5b506102a361236d565b3480156106f657600080fd5b5061070a61070536600461540f565b61242a565b6040516102ad919061576a565b34801561072357600080fd5b50610737610732366004615711565b612437565b604080516001600160a01b0390931683526020830191909152016102ad565b34801561076257600080fd5b506102a361245d565b34801561077757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061054c565b3480156107aa57600080fd5b5060cf546102a3565b3480156107bf57600080fd5b506102a36107ce36600461558e565b612469565b3480156107df57600080fd5b506102a3600080516020615b9d83398151915281565b34801561080157600080fd5b50610281610810366004615551565b6125df565b60335460ff16156108415760405162461bcd60e51b81526004016108389061585d565b60405180910390fd5b61086c61085336849003840184615633565b8261085f576000610865565b83602001355b600061284d565b5050565b600061087e60335460ff1690565b1561089b5760405162461bcd60e51b81526004016108389061585d565b6101208401516001600160a01b03811633146109055760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b6064820152608401610838565b604051635dfdc5d760e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063bbfb8bae9060240160006040518083038186803b15801561096657600080fd5b505afa15801561097a573d6000803e3d6000fd5b50505050826bffffffffffffffffffffffff166060826001600160a01b0316901b6109a59190615a24565b85526109b085612c1b565b8551600090815260cc602052604081209190915560a086015160ce8054919290916109dc908490615a24565b909155506109eb905085612c4b565b8451604051632851206560e21b81526001600160a01b03868116600483015260248201929092527f00000000000000000000000000000000000000000000000000000000000000009091169063a144819490604401600060405180830381600087803b158015610a5a57600080fd5b505af1158015610a6e573d6000803e3d6000fd5b50505050610abe84308761010001518860a00151610a8c9190615a24565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612e09565b610b8a847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1b57600080fd5b505afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b53919061542c565b60c08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612e09565b60008560e00151118015610c205750806001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd257600080fd5b505afa158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0a919061542c565b6001600160a01b0316846001600160a01b031614155b15610cd157610cd184826001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c6257600080fd5b505afa158015610c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9a919061542c565b60e08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612e09565b806001600160a01b03167ff8da20dc84e4c9850943fcd1a0587142b2bac3fef70840ccee41f5edd22bc47786604051610d0a9190615920565b60405180910390a2505082515b9392505050565b600081815260cd60205260408120610d3590612e7a565b92915050565b600082815260cd6020526040812081908190610d579085612e85565b915091508115610d6a579150610d359050565b600092505050610d35565b505092915050565b600060cf5460d05460ce54610d929190615a24565b610d9c9190615a7d565b905090565b6000610daf60335460ff1690565b15610dcc5760405162461bcd60e51b81526004016108389061585d565b600080610dda60c985612ea1565b91509150818015610e1757506001816003811115610dfa57610dfa615b17565b1480610e1757506002816003811115610e1557610e15615b17565b145b610e5a5760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b6044820152606401610838565b6000846001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9557600080fd5b505afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd919061550e565b90506000610eda82612ed4565b90506001600160a01b038616631c0f4f81610ef58385615a7d565b6040518263ffffffff1660e01b8152600401610f1391815260200190565b600060405180830381600087803b158015610f2d57600080fd5b505af1158015610f41573d6000803e3d6000fd5b505050508082610f519190615a7d565b9450505050505b919050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610fa65760405162461bcd60e51b8152600401610838906157c5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610fef600080516020615b7d833981519152546001600160a01b031690565b6001600160a01b0316146110155760405162461bcd60e51b815260040161083890615811565b61101e81612f76565b6040805160008082526020820190925261103a91839190613017565b50565b60405163c5b8f5cf60e01b8152600080516020615be483398151915260048201819052600080516020615b9d8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b1580156110ca57600080fd5b505afa1580156110de573d6000803e3d6000fd5b5050505061086c613191565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461117c5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c792074686520506f6c696379506f6f6c436f6e6669672063616e20636860448201527030b733b29030b9b9b2ba26b0b730b3b2b960791b6064820152608401610838565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e057600080fd5b505afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611218919061542c565b6001600160a01b03161461144b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561127f57600080fd5b505afa158015611293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b7919061542c565b6001600160a01b031663cec16f3f6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156112f157600080fd5b505af1158015611305573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561139157600080fd5b505afa1580156113a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c9919061542c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401602060405180830381600087803b15801561141157600080fd5b505af1158015611425573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144991906154f1565b505b6001600160a01b0381161561103a5760405163095ea7b360e01b81526001600160a01b03828116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b1580156114c557600080fd5b505af11580156114d9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c91906154f1565b60335460ff16156115205760405162461bcd60e51b81526004016108389061585d565b60008061152e60c985612ea1565b915091508180156115505750600181600381111561154e5761154e615b17565b145b6115935760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b6044820152606401610838565b6115c86001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086612e09565b6040516311f9fbc960e21b8152336004820152602481018490526001600160a01b038516906347e7ef2490604401602060405180830381600087803b15801561161057600080fd5b505af1158015611624573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611648919061550e565b5050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116985760405162461bcd60e51b8152600401610838906157c5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166116e1600080516020615b7d833981519152546001600160a01b031690565b6001600160a01b0316146117075760405162461bcd60e51b815260040161083890615811565b61171082612f76565b61086c82826001613017565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610838565b50600080516020615b7d83398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561185757600080fd5b505afa15801561186b573d6000803e3d6000fd5b5060029250611878915050565b61188360c984613224565b600381111561189457611894615b17565b146118d95760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b6044820152606401610838565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561191257600080fd5b505afa158015611926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194a919061550e565b156119a65760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b6064820152608401610838565b816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c60006040516119e0919061576a565b60405180910390a25050565b600080805b6119fb60c9612e7a565b811015611aa3576000611a0f60c983613241565b509050806001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4b57600080fd5b505afa158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a83919061550e565b611a8d9084615a24565b9250508080611a9b90615ae6565b9150506119f1565b506000611aae610d7d565b905081811115611ac957611ac28282615a7d565b9250505090565b60009250505090565b600054610100900460ff16611aed5760005460ff1615611af1565b303b155b611b0d5760405162461bcd60e51b815260040161083890615887565b600054610100900460ff16158015611b2f576000805461ffff19166101011790555b611b37613250565b611b3f613279565b611b476132a8565b801561103a576000805461ff001916905550565b611b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084612e09565b611b9981613517565b6040805160018152602081018390527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a150565b6040516312d9a6ad60e01b8152600080516020615be483398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611c4c57600080fd5b505afa158015611c60573d6000803e3d6000fd5b5050505061103a61357c565b6040516312d9a6ad60e01b81527fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b794057600482018190523360248301526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312d9a6ad9060440160006040518083038186803b158015611cf657600080fd5b505afa158015611d0a573d6000803e3d6000fd5b5050505060d054831115611d1e5760d05492505b60008311611d6e5760405162461bcd60e51b815260206004820152601760248201527f4e6f207072656d69756d7320746f2077697468647261770000000000000000006044820152606401610838565b8260d06000828254611d809190615a7d565b92505081905550611e217f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611de357600080fd5b505afa158015611df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1b919061542c565b846135d4565b6040805160008152602081018590527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a15090919050565b60335460ff1615611e855760405162461bcd60e51b81526004016108389061585d565b42611e9861018083016101608401615733565b64ffffffffff161115611ee65760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610838565b61103a611ef836839003830183615633565b6000600161284d565b60335460ff1615611f245760405162461bcd60e51b81526004016108389061585d565b61086c611f3636849003840184615633565b82600061284d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9757600080fd5b505afa158015611fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcf919061542c565b6001600160a01b0316336001600160a01b0316146120405760405162461bcd60e51b815260206004820152602860248201527f4f6e6c792061737365744d616e616765722063616e2063616c6c207468697320604482015267333ab731ba34b7b760c11b6064820152608401610838565b60335460ff16156120635760405162461bcd60e51b81526004016108389061585d565b80156120725761086c82613517565b61207b82612ed4565b505050565b6000808061208f60c985613241565b909250905060008160038111156120a8576120a8615b17565b146120b4575092915050565b5060009392505050565b6040516312d9a6ad60e01b8152600080516020615b9d83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561213457600080fd5b505afa158015612148573d6000803e3d6000fd5b50505050600a61215860c9612e7a565b106121af5760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d206e756d626572206f662045546f6b656e73207265616368656044820152601960fa1b6064820152608401610838565b6121ba60c983613980565b156122075760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c0000000000006044820152606401610838565b6001600160a01b0382166122545760405162461bcd60e51b815260206004820152601460248201527365546f6b656e2063616e2774206265207a65726f60601b6044820152606401610838565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cf919061542c565b6001600160a01b0316146123255760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c00006044820152606401610838565b61233260c983600161398c565b50816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c60016040516119e0919061576a565b600080805b61237c60c9612e7a565b81101561242457600061239060c983613241565b509050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123cc57600080fd5b505afa1580156123e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612404919061550e565b61240e9084615a24565b925050808061241c90615ae6565b915050612372565b50919050565b6000610d3560c983613224565b600082815260cd60205260408120819061245190846139b2565b915091505b9250929050565b6000610d9c60c9612e7a565b600061247760335460ff1690565b156124945760405162461bcd60e51b81526004016108389061585d565b6000806124a260c986612ea1565b915091508180156124df575060018160038111156124c2576124c2615b17565b14806124df575060028160038111156124dd576124dd615b17565b145b61253d5760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608401610838565b60405163f3fef3a360e01b8152336004820181905260248201869052906000906001600160a01b0388169063f3fef3a390604401602060405180830381600087803b15801561258b57600080fd5b505af115801561259f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c3919061550e565b905080156125d5576125d582826135d4565b9695505050505050565b60405163c5b8f5cf60e01b8152600080516020615be483398151915260048201819052600080516020615b9d8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561266c57600080fd5b505afa158015612680573d6000803e3d6000fd5b505050506126988460c961398090919063ffffffff16565b6126dc5760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b6044820152606401610838565b60038360038111156126f0576126f0615b17565b1415806127a35750604051632474521560e21b8152600080516020615be483398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561276b57600080fd5b505afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a391906154f1565b6127f95760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920475541524449414e2063616e2073757370656e642065546f6b656e6044820152607360f81b6064820152608401610838565b61280560c9858561398c565b50836001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c8460405161283f919061576a565b60405180910390a250505050565b612856836139c1565b610120830151818061287057506001600160a01b03811633145b6128bc5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c69636965736044820152606401610838565b8215806128d457504284610160015164ffffffffff16115b6129205760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610838565b6040516310f199ef60e31b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063878ccf789060240160006040518083038186803b15801561298157600080fd5b505afa158015612995573d6000803e3d6000fd5b5050505083602001518311156129e65760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610838565b600080841190508460a0015160ce6000828254612a039190615a7d565b909155506000905080612a17878488613a27565b915091508215612af0576000612a2d8884613b81565b90507f0000000000000000000000000000000000000000000000000000000000000000811115612a6357612a6081613d8d565b90505b7f0000000000000000000000000000000000000000000000000000000000000000811115612aea5760405162461bcd60e51b815260206004820152602e60248201527f446f6e2774206b6e6f7720776865726520746f2074616b65207468652072657360448201526d74206f6620746865206d6f6e657960901b6064820152608401610838565b50612afd565b612afa8782613eac565b90505b612b0681613517565b6060870151604051634e5de6c960e11b815260048101919091526001600160a01b03851690639cbbcd9290602401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b5050505086600001518761012001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e88604051612bab91815260200190565b60405180910390a38651600090815260cc602090815260408083208390558951835260cd909152812090818181818181612be582826152ff565b50505050505050506000861115612c07578651612c02908761418e565b612c12565b8651612c129061438c565b50505050505050565b600081604051602001612c2e9190615920565b604051602081830303815290604052805190602001209050919050565b8051600090815260cd60205260408120815b612c6760c9612e7a565b811015612df057600080612c7c60c984613241565b90925090506001816003811115612c9557612c95615b17565b14612ca1575050612dde565b610120860151610160870151604051630cd21c5560e21b81526001600160a01b03928316600482015264ffffffffff90911660248201529083169063334871549060440160206040518083038186803b158015612cfd57600080fd5b505afa158015612d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3591906154f1565b612d40575050612dde565b6000826001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d7b57600080fd5b505afa158015612d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db3919061550e565b905080612dc257505050612dde565b612dcc8187615a24565b9550612dd98584836144d2565b505050505b80612de881615ae6565b915050612c5d565b5061207b8360600151612e02856144df565b8484614539565b6040516001600160a01b0380851660248301528316604482015260648101829052612e749085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261468c565b50505050565b6000610d358261475e565b6000808080612e948686614769565b9097909650945050505050565b6000808080612eb08686614769565b9150915081816003811115612ec757612ec7615b17565b9350935050509250929050565b600060d0548211612efe578160d06000828254612ef19190615a7d565b9091555060009392505050565b60d05415612f1b5760d054612f139083615a7d565b600060d05591505b60cf5460ce541115612f725760cf5460ce54612f379190615a7d565b8211612f4f578160cf6000828254612ef19190615a24565b60cf5460ce54612f5f9190615a7d565b612f699083615a7d565b60ce5460cf5591505b5090565b60405163c5b8f5cf60e01b8152600080516020615be483398151915260048201819052600080516020615b9d8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561300357600080fd5b505afa158015612c12573d6000803e3d6000fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561304a5761207b836147ac565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308357600080fd5b505afa9250505080156130b3575060408051601f3d908101601f191682019092526130b09181019061550e565b60015b6131165760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610838565b600080516020615b7d83398151915281146131855760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610838565b5061207b838383614848565b60335460ff166131da5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610838565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000613230838361486d565b6003811115610d1757610d17615b17565b6000808080612eb086866148e7565b600054610100900460ff166132775760405162461bcd60e51b8152600401610838906158d5565b565b600054610100900460ff166132a05760405162461bcd60e51b8152600401610838906158d5565b61327761491c565b600054610100900460ff166132c35760005460ff16156132c7565b303b155b6132e35760405162461bcd60e51b815260040161083890615887565b600054610100900460ff16158015613305576000805461ffff19166101011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561336057600080fd5b505af1158015613374573d6000803e3d6000fd5b5050505060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156133dc57600080fd5b505afa1580156133f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613414919061542c565b6001600160a01b0316146134905760405162461bcd60e51b815260206004820152603a60248201527f41737365744d616e616765722063616e277420626520736574206265666f726560448201527f20506f6c696379506f6f6c20696e697469616c697a6174696f6e0000000000006064820152608401610838565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156134eb57600080fd5b505af11580156134ff573d6000803e3d6000fd5b50505050801561103a576000805461ff001916905550565b8061351f5750565b8060cf5410613545578060cf600082825461353a9190615a7d565b9091555061103a9050565b60cf54156135625760cf5461355a9082615a7d565b600060cf5590505b8060d060008282546135749190615a24565b909155505050565b60335460ff161561359f5760405162461bcd60e51b81526004016108389061585d565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586132073390565b806135dd575050565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561364157600080fd5b505afa158015613655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613679919061542c565b6001600160a01b03161415801561369657508061369461494f565b105b1561378c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156136f457600080fd5b505afa158015613708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372c919061542c565b6001600160a01b0316631014a0c2826040518263ffffffff1660e01b815260040161375991815260200190565b600060405180830381600087803b15801561377357600080fd5b505af1158015613787573d6000803e3d6000fd5b505050505b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b1580156137f057600080fd5b505afa158015613804573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613828919061542c565b6001600160a01b03161415801561384557508061384361494f565b105b1561394c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b1580156138a357600080fd5b505afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db919061542c565b6001600160a01b031663ee842dda6138f161494f565b6138fb9084615a7d565b6040518263ffffffff1660e01b815260040161391991815260200190565b600060405180830381600087803b15801561393357600080fd5b505af1158015613947573d6000803e3d6000fd5b505050505b61086c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836149e9565b6000610d178383614a19565b60006139aa84848460038111156139a5576139a5615b17565b614a25565b949350505050565b6000808080612e9486866148e7565b8051158015906139e857508051600090815260cc60205260409020546139e682612c1b565b145b61103a5760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610838565b60008060008060008615613b215787516040516331a9108f60e11b8152613adf916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e91613a899160040190815260200190565b60206040518083038186803b158015613aa157600080fd5b505afa158015613ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad9919061542c565b876135d4565b858860a001511115613b0257858860a00151613afb9190615a7d565b9150613b74565b613b1a8860a0015187613b159190615a7d565b612ed4565b9250613b74565b8760a00151915060ce5460cf541115613b7457613b4d60ce5460cf54613b479190615a7d565b83614a4c565b90508060cf6000828254613b619190615a7d565b90915550613b7190508183615a7d565b91505b5090969095509350505050565b60008080613b8e856144df565b9050600080613b9c87614a5b565b8851600090815260cd602052604081209294509092505b613bbc82612e7a565b811015613d8057600080613bd084846139b2565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b158015613c1e57600080fd5b505af1158015613c32573d6000803e3d6000fd5b50505060608c0151613c4691508290614aa7565b90506001600160a01b03821663aa69d74b613c618784614ba7565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b158015613ca257600080fd5b505af1158015613cb6573d6000803e3d6000fd5b5050505060008a1115613d6b576000613ccf8b83614ba7565b604051630c1ceca560e21b815260048101829052600160248201529091506001600160a01b03841690633073b29490604401602060405180830381600087803b158015613d1b57600080fd5b505af1158015613d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d53919061550e565b613d5d9082615a7d565b613d67908a615a24565b9850505b50508080613d7890615ae6565b915050613bb3565b5093979650505050505050565b6000805b613d9b60c9612e7a565b811015613ea557600080613db060c984613241565b90925090506001816003811115613dc957613dc9615b17565b14613dd5575050613e93565b604051630c1ceca560e21b815260048101869052600060248201526001600160a01b03831690633073b29490604401602060405180830381600087803b158015613e1e57600080fd5b505af1158015613e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e56919061550e565b613e609086615a7d565b94507f00000000000000000000000000000000000000000000000000000000000000008511613e90575050613ea5565b50505b80613e9d81615ae6565b915050613d91565b5090919050565b600080613eb8846144df565b9050600080613ec686614a5b565b8751600090815260cd602052604081209294509092505b613ee682612e7a565b81101561418257600080613efa84846139b2565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b158015613f4857600080fd5b505af1158015613f5c573d6000803e3d6000fd5b50505060608b0151613f7091508290614aa7565b90506001600160a01b03821663aa69d74b613f8b8784614ba7565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b158015613fcc57600080fd5b505af1158015613fe0573d6000803e3d6000fd5b5050505060008911801561406457506000826001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561402a57600080fd5b505afa15801561403e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614062919061550e565b115b1561416d5760a08a015160009061407b9083614ba7565b90506141008a6140fb856001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156140bd57600080fd5b505afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f5919061550e565b84614a4c565b614a4c565b604051631c0f4f8160e01b8152600481018290529091506001600160a01b03841690631c0f4f8190602401600060405180830381600087803b15801561414557600080fd5b505af1158015614159573d6000803e3d6000fd5b50505050808a6141699190615a7d565b9950505b5050808061417a90615ae6565b915050613edd565b50949695505050505050565b6040516331a9108f60e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156141f157600080fd5b505afa158015614205573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614229919061542c565b90506001600160a01b0381163b61423f57505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044810186905260648101859052608401602060405180830381600087803b1580156142a457600080fd5b505af19250505080156142d4575060408051601f3d908101601f191682019092526142d191810190615527565b60015b61431c573d808015614302576040519150601f19603f3d011682016040523d82523d6000602084013e614307565b606091505b5080516143145750505050565b805181602001fd5b6001600160e01b03198116636b140e9f60e11b14612e745760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b6064820152608401610838565b6040516331a9108f60e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156143ef57600080fd5b505afa158015614403573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614427919061542c565b90506001600160a01b0381163b61443c575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101859052606401602060405180830381600087803b15801561449a57600080fd5b505af19250505080156144ca575060408051601f3d908101601f191682019092526144c791810190615527565b60015b61207b575050565b60006139aa848484614a25565b6000610d3561453483606001518461014001518561016001516145029190615a94565b64ffffffffff166145139190615a5e565b61010085015161452e906a1a1601fc4ea7109e000000614ba7565b90614aa7565b614c78565b838210156145975760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676874206f6365616e20746f20636f7665722074686520706044820152646f6c69637960d81b6064820152608401610838565b8360005b6145a483612e7a565b81101561468457600080806145b986856139b2565b9150915060016145c887612e7a565b6145d29190615a7d565b8410156145ee576145e78761452e8b84614ba7565b92506145f2565b8492505b60405163837c83a360e01b815260048101899052602481018490526001600160a01b0383169063837c83a390604401600060405180830381600087803b15801561463b57600080fd5b505af115801561464f573d6000803e3d6000fd5b506146619250889150849050856144d2565b5061466c8386615a7d565b9450505050808061467c90615ae6565b91505061459b565b505050505050565b60006146e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614cf69092919063ffffffff16565b80519091501561207b57808060200190518101906146ff91906154f1565b61207b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610838565b6000610d3582614d05565b6001600160a01b03811660009081526002830160205260408120548190806147a1576147958585614a19565b60009250925050612456565b600192509050612456565b6001600160a01b0381163b6148195760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610838565b600080516020615b7d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61485183614d0f565b60008251118061485e5750805b1561207b57612e748383614d4f565b6001600160a01b03811660009081526002830160205260408120548015158061489b575061489b8484614a19565b610d175760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610838565b600080806148f58585614e43565b6001600160a01b038116600090815260029690960160205260409095205494959350505050565b600054610100900460ff166149435760405162461bcd60e51b8152600401610838906158d5565b6033805460ff19169055565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156149b157600080fd5b505afa1580156149c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9c919061550e565b6040516001600160a01b03831660248201526044810182905261207b90849063a9059cbb60e01b90606401612e3d565b6000610d178383614e4f565b6001600160a01b038216600090815260028401602052604081208290556139aa8484614e71565b6000818310613ea55781610d17565b6000806000614a6984614e86565b90508084610100015110614a9457600181856101000151614a8a9190615a7d565b9250925050915091565b600084610100015182614a8a9190615a7d565b600081614af65760405162461bcd60e51b815260206004820152601860248201527f7761644469763a204469766973696f6e206279207a65726f00000000000000006044820152606401610838565b6000614b03600284615a3c565b9050670de0b6b3a7640000614b1a82600019615a7d565b614b249190615a3c565b841115614b7f5760405162461bcd60e51b8152602060048201526024808201527f7761644469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b6064820152608401610838565b8281614b93670de0b6b3a764000087615a5e565b614b9d9190615a24565b6139aa9190615a3c565b6000821580614bb4575081155b15614bc157506000610d35565b81614bd56002670de0b6b3a7640000615a3c565b614be190600019615a7d565b614beb9190615a3c565b831115614c465760405162461bcd60e51b8152602060048201526024808201527f7761644d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b6064820152608401610838565b670de0b6b3a7640000614c5a600282615a3c565b614c648486615a5e565b614c6e9190615a24565b610d179190615a3c565b600080614c89633b9aca0084615a5e565b905082614c9a633b9aca0083615a3c565b14610d355760405162461bcd60e51b815260206004820152602660248201527f776164546f5261643a204d617468204d756c7469706c69636174696f6e204f766044820152656572666c6f7760d01b6064820152608401610838565b60606139aa8484600085614eed565b6000610d35825490565b614d18816147ac565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b614db75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610838565b600080846001600160a01b031684604051614dd2919061574e565b600060405180830381855af49150503d8060008114614e0d576040519150601f19603f3d011682016040523d82523d6000602084013e614e12565b606091505b5091509150614e3a8282604051806060016040528060278152602001615bbd6027913961501e565b95945050505050565b6000610d178383615057565b6001600160a01b03811660009081526001830160205260408120541515610d17565b6000610d17836001600160a01b038416615081565b60008082610140015164ffffffffff1642614ea19190615a7d565b9050610d17614ee86e0612d847b578e7643c28ac00000000614ee2614ec5876144df565b614ecf9086615a5e565b614edc8860600151614c78565b906150d0565b9061518b565b61527f565b606082471015614f4e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610838565b6001600160a01b0385163b614fa55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610838565b600080866001600160a01b03168587604051614fc1919061574e565b60006040518083038185875af1925050503d8060008114614ffe576040519150601f19603f3d011682016040523d82523d6000602084013e615003565b606091505b509150915061501382828661501e565b979650505050505050565b6060831561502d575081610d17565b82511561503d5782518084602001fd5b8160405162461bcd60e51b81526004016108389190615792565b600082600001828154811061506e5761506e615b2d565b9060005260206000200154905092915050565b60008181526001830160205260408120546150c857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d35565b506000610d35565b60008215806150dd575081155b156150ea57506000610d35565b8161510260026b033b2e3c9fd0803ce8000000615a3c565b61510e90600019615a7d565b6151189190615a3c565b8311156151735760405162461bcd60e51b8152602060048201526024808201527f7261794d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b6064820152608401610838565b6b033b2e3c9fd0803ce8000000614c5a600282615a3c565b6000816151da5760405162461bcd60e51b815260206004820152601860248201527f7261794469763a204469766973696f6e206279207a65726f00000000000000006044820152606401610838565b60006151e7600284615a3c565b90506b033b2e3c9fd0803ce800000061520282600019615a7d565b61520c9190615a3c565b8411156152675760405162461bcd60e51b8152602060048201526024808201527f7261794469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b6064820152608401610838565b8281614b936b033b2e3c9fd0803ce800000087615a5e565b6000806152916002633b9aca00615a3c565b9050600061529f8483615a24565b9050818110156152f15760405162461bcd60e51b815260206004820181905260248201527f726179546f5761643a204d617468204164646974696f6e204f766572666c6f776044820152606401610838565b6139aa633b9aca0082615a3c565b508054600082559060005260206000209081019061103a91905b80821115612f725760008155600101615319565b8035610f5881615b59565b6000610180828403121561242457600080fd5b6000610180828403121561535e57600080fd5b6153666159c9565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206153cc81840161532d565b908201526101406153de8382016153fa565b908201526101606153f08382016153fa565b9082015292915050565b803564ffffffffff81168114610f5857600080fd5b60006020828403121561542157600080fd5b8135610d1781615b59565b60006020828403121561543e57600080fd5b8151610d1781615b59565b6000806040838503121561545c57600080fd5b823561546781615b59565b915060208381013567ffffffffffffffff8082111561548557600080fd5b818601915086601f83011261549957600080fd5b8135818111156154ab576154ab615b43565b6154bd601f8201601f191685016159f3565b915080825287848285010111156154d357600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561550357600080fd5b8151610d1781615b6e565b60006020828403121561552057600080fd5b5051919050565b60006020828403121561553957600080fd5b81516001600160e01b031981168114610d1757600080fd5b6000806040838503121561556457600080fd5b823561556f81615b59565b915060208301356004811061558357600080fd5b809150509250929050565b600080604083850312156155a157600080fd5b82356155ac81615b59565b946020939093013593505050565b600061018082840312156155cd57600080fd5b610d178383615338565b6000806101a083850312156155eb57600080fd5b6155f58484615338565b915061018083013561558381615b6e565b6000806101a0838503121561561a57600080fd5b6156248484615338565b94610180939093013593505050565b6000610180828403121561564657600080fd5b610d17838361534b565b60008060006101c0848603121561566657600080fd5b615670858561534b565b925061018084013561568181615b59565b91506101a08401356bffffffffffffffffffffffff811681146156a357600080fd5b809150509250925092565b6000602082840312156156c057600080fd5b5035919050565b600080604083850312156156da57600080fd5b82359150602083013561558381615b6e565b600080604083850312156156ff57600080fd5b82359150602083013561558381615b59565b6000806040838503121561572457600080fd5b50508035926020909101359150565b60006020828403121561574557600080fd5b610d17826153fa565b60008251615760818460208701615aba565b9190910192915050565b602081016004831061578c57634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600082518060208401526157b1816040850160208701615aba565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600061018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e08301526101008084015181840152506101208084015161599a828501826001600160a01b03169052565b50506101408381015164ffffffffff81168483015250506101608381015164ffffffffff811684830152610d75565b604051610180810167ffffffffffffffff811182821017156159ed576159ed615b43565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615a1c57615a1c615b43565b604052919050565b60008219821115615a3757615a37615b01565b500190565b600082615a5957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615a7857615a78615b01565b500290565b600082821015615a8f57615a8f615b01565b500390565b600064ffffffffff83811690831681811015615ab257615ab2615b01565b039392505050565b60005b83811015615ad5578181015183820152602001615abd565b83811115612e745750506000910152565b6000600019821415615afa57615afa615b01565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461103a57600080fd5b801515811461103a57600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220da7b4e1ee4e9175312c4e092e4bc542f6bb2b694c1b882cb66955e63b17a8a4864736f6c63430008060033",
|
|
1166
|
+
"deployedBytecode": "0x60806040526004361061025c5760003560e01c806365e29c7e11610144578063b0ec4bcf116100b6578063dea167d51161007a578063dea167d514610756578063e5a6b10f1461076b578063e823584a1461079e578063f3fef3a3146107b3578063f67b2bad146107d3578063fcbb17fe146107f557600080fd5b8063b0ec4bcf14610695578063b63d382e146106b5578063b77ddfea146106d5578063ca143d18146106ea578063ce937e7b1461071757600080fd5b8063846253d111610108578063846253d1146105ae5780638a9defff146105ce5780638ca23bc9146105ee5780639e556b2b14610622578063ab60016914610642578063af02808a1461066257600080fd5b806365e29c7e1461050857806379502c551461051d5780638129fc1c1461056457806381ced71f146105795780638456cb591461059957600080fd5b80633f4ba83a116101dd57806352d1902d116101a157806352d1902d14610452578063536c9a43146104675780635b494dd51461047c5780635c975abb146104b057806363c0f4b1146104d357806365b71008146104e857600080fd5b80633f4ba83a146103b657806343060237146103cb57806347e7ef24146103eb5780634a47a3e01461040b5780634f1ef2861461043f57600080fd5b806324ea54f41161022457806324ea54f41461030b57806326ccbd221461032d5780632a2be82d146103425780633659cfe614610362578063396512fd1461038257600080fd5b8063066dda0e1461026157806319704a3a146102835780631a548a27146102b65780631c5c4aea146102cb578063220c262b146102eb575b600080fd5b34801561026d57600080fd5b5061028161027c3660046155d7565b610815565b005b34801561028f57600080fd5b506102a361029e366004615650565b610870565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b5060ce546102a3565b3480156102d757600080fd5b506102a36102e63660046156ae565b610d1e565b3480156102f757600080fd5b506102a36103063660046156ec565b610d3b565b34801561031757600080fd5b506102a3600080516020615be483398151915281565b34801561033957600080fd5b506102a3610d7d565b34801561034e57600080fd5b506102a361035d36600461540f565b610da1565b34801561036e57600080fd5b5061028161037d36600461540f565b610f5d565b34801561038e57600080fd5b506102a37f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c257600080fd5b5061028161103d565b3480156103d757600080fd5b506102816103e636600461540f565b6110ea565b3480156103f757600080fd5b5061028161040636600461558e565b6114fd565b34801561041757600080fd5b506102a37fa82e22387fca439f316d78ca566f383218ab8ae1b3e830178c9c82cbd16749c081565b61028161044d366004615449565b61164f565b34801561045e57600080fd5b506102a361171c565b34801561047357600080fd5b5060d0546102a3565b34801561048857600080fd5b506102a37f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2781565b3480156104bc57600080fd5b5060335460ff1660405190151581526020016102ad565b3480156104df57600080fd5b506102a3600a81565b3480156104f457600080fd5b5061028161050336600461540f565b6117cf565b34801561051457600080fd5b506102a36119ec565b34801561052957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016102ad565b34801561057057600080fd5b50610281611ad2565b34801561058557600080fd5b506102816105943660046156ae565b611b5b565b3480156105a557600080fd5b50610281611bd6565b3480156105ba57600080fd5b506102a36105c93660046156ae565b611c6c565b3480156105da57600080fd5b506102816105e93660046155ba565b611e62565b3480156105fa57600080fd5b506102a37fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b79405781565b34801561062e57600080fd5b5061028161063d366004615606565b611f01565b34801561064e57600080fd5b5061028161065d3660046156c7565b611f3e565b34801561066e57600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061054c565b3480156106a157600080fd5b5061054c6106b03660046156ae565b612080565b3480156106c157600080fd5b506102816106d036600461540f565b6120be565b3480156106e157600080fd5b506102a361236d565b3480156106f657600080fd5b5061070a61070536600461540f565b61242a565b6040516102ad919061576a565b34801561072357600080fd5b50610737610732366004615711565b612437565b604080516001600160a01b0390931683526020830191909152016102ad565b34801561076257600080fd5b506102a361245d565b34801561077757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061054c565b3480156107aa57600080fd5b5060cf546102a3565b3480156107bf57600080fd5b506102a36107ce36600461558e565b612469565b3480156107df57600080fd5b506102a3600080516020615b9d83398151915281565b34801561080157600080fd5b50610281610810366004615551565b6125df565b60335460ff16156108415760405162461bcd60e51b81526004016108389061585d565b60405180910390fd5b61086c61085336849003840184615633565b8261085f576000610865565b83602001355b600061284d565b5050565b600061087e60335460ff1690565b1561089b5760405162461bcd60e51b81526004016108389061585d565b6101208401516001600160a01b03811633146109055760405162461bcd60e51b815260206004820152602360248201527f4f6e6c792074686520524d2063616e20637265617465206e657720706f6c696360448201526269657360e81b6064820152608401610838565b604051635dfdc5d760e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063bbfb8bae9060240160006040518083038186803b15801561096657600080fd5b505afa15801561097a573d6000803e3d6000fd5b50505050826bffffffffffffffffffffffff166060826001600160a01b0316901b6109a59190615a24565b85526109b085612c1b565b8551600090815260cc602052604081209190915560a086015160ce8054919290916109dc908490615a24565b909155506109eb905085612c4b565b8451604051632851206560e21b81526001600160a01b03868116600483015260248201929092527f00000000000000000000000000000000000000000000000000000000000000009091169063a144819490604401600060405180830381600087803b158015610a5a57600080fd5b505af1158015610a6e573d6000803e3d6000fd5b50505050610abe84308761010001518860a00151610a8c9190615a24565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612e09565b610b8a847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1b57600080fd5b505afa158015610b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b53919061542c565b60c08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612e09565b60008560e00151118015610c205750806001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd257600080fd5b505afa158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0a919061542c565b6001600160a01b0316846001600160a01b031614155b15610cd157610cd184826001600160a01b031663521eb2736040518163ffffffff1660e01b815260040160206040518083038186803b158015610c6257600080fd5b505afa158015610c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9a919061542c565b60e08801516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612e09565b806001600160a01b03167ff8da20dc84e4c9850943fcd1a0587142b2bac3fef70840ccee41f5edd22bc47786604051610d0a9190615920565b60405180910390a2505082515b9392505050565b600081815260cd60205260408120610d3590612e7a565b92915050565b600082815260cd6020526040812081908190610d579085612e85565b915091508115610d6a579150610d359050565b600092505050610d35565b505092915050565b600060cf5460d05460ce54610d929190615a24565b610d9c9190615a7d565b905090565b6000610daf60335460ff1690565b15610dcc5760405162461bcd60e51b81526004016108389061585d565b600080610dda60c985612ea1565b91509150818015610e1757506001816003811115610dfa57610dfa615b17565b1480610e1757506002816003811115610e1557610e15615b17565b145b610e5a5760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b6044820152606401610838565b6000846001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9557600080fd5b505afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd919061550e565b90506000610eda82612ed4565b90506001600160a01b038616631c0f4f81610ef58385615a7d565b6040518263ffffffff1660e01b8152600401610f1391815260200190565b600060405180830381600087803b158015610f2d57600080fd5b505af1158015610f41573d6000803e3d6000fd5b505050508082610f519190615a7d565b9450505050505b919050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610fa65760405162461bcd60e51b8152600401610838906157c5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610fef600080516020615b7d833981519152546001600160a01b031690565b6001600160a01b0316146110155760405162461bcd60e51b815260040161083890615811565b61101e81612f76565b6040805160008082526020820190925261103a91839190613017565b50565b60405163c5b8f5cf60e01b8152600080516020615be483398151915260048201819052600080516020615b9d8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b1580156110ca57600080fd5b505afa1580156110de573d6000803e3d6000fd5b5050505061086c613191565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461117c5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c792074686520506f6c696379506f6f6c436f6e6669672063616e20636860448201527030b733b29030b9b9b2ba26b0b730b3b2b960791b6064820152608401610838565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e057600080fd5b505afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611218919061542c565b6001600160a01b03161461144b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561127f57600080fd5b505afa158015611293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b7919061542c565b6001600160a01b031663cec16f3f6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156112f157600080fd5b505af1158015611305573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561139157600080fd5b505afa1580156113a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c9919061542c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401602060405180830381600087803b15801561141157600080fd5b505af1158015611425573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144991906154f1565b505b6001600160a01b0381161561103a5760405163095ea7b360e01b81526001600160a01b03828116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b1580156114c557600080fd5b505af11580156114d9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086c91906154f1565b60335460ff16156115205760405162461bcd60e51b81526004016108389061585d565b60008061152e60c985612ea1565b915091508180156115505750600181600381111561154e5761154e615b17565b145b6115935760405162461bcd60e51b815260206004820152601460248201527365546f6b656e206973206e6f742061637469766560601b6044820152606401610838565b6115c86001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086612e09565b6040516311f9fbc960e21b8152336004820152602481018490526001600160a01b038516906347e7ef2490604401602060405180830381600087803b15801561161057600080fd5b505af1158015611624573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611648919061550e565b5050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156116985760405162461bcd60e51b8152600401610838906157c5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166116e1600080516020615b7d833981519152546001600160a01b031690565b6001600160a01b0316146117075760405162461bcd60e51b815260040161083890615811565b61171082612f76565b61086c82826001613017565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610838565b50600080516020615b7d83398151915290565b6040516312d9a6ad60e01b81527f5ec196419322369c6bac572d883f4d990ae5ec82f7d93cdf89b85dbb05b63c2760048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561185757600080fd5b505afa15801561186b573d6000803e3d6000fd5b5060029250611878915050565b61188360c984613224565b600381111561189457611894615b17565b146118d95760405162461bcd60e51b815260206004820152601560248201527411551bdad95b881b9bdd0819195c1c9958d85d1959605a1b6044820152606401610838565b816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561191257600080fd5b505afa158015611926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194a919061550e565b156119a65760405162461bcd60e51b815260206004820152602660248201527f45546f6b656e20686173206c69717569646974792c2063616e27742062652072604482015265195b5bdd995960d21b6064820152608401610838565b816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c60006040516119e0919061576a565b60405180910390a25050565b600080805b6119fb60c9612e7a565b811015611aa3576000611a0f60c983613241565b509050806001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a4b57600080fd5b505afa158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a83919061550e565b611a8d9084615a24565b9250508080611a9b90615ae6565b9150506119f1565b506000611aae610d7d565b905081811115611ac957611ac28282615a7d565b9250505090565b60009250505090565b600054610100900460ff16611aed5760005460ff1615611af1565b303b155b611b0d5760405162461bcd60e51b815260040161083890615887565b600054610100900460ff16158015611b2f576000805461ffff19166101011790555b611b37613250565b611b3f613279565b611b476132a8565b801561103a576000805461ff001916905550565b611b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084612e09565b611b9981613517565b6040805160018152602081018390527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a150565b6040516312d9a6ad60e01b8152600080516020615be483398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b158015611c4c57600080fd5b505afa158015611c60573d6000803e3d6000fd5b5050505061103a61357c565b6040516312d9a6ad60e01b81527fa23b11d346b90fc279e0a917152caf41f3c1247b12211b7cbc0e0e3f8b794057600482018190523360248301526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312d9a6ad9060440160006040518083038186803b158015611cf657600080fd5b505afa158015611d0a573d6000803e3d6000fd5b5050505060d054831115611d1e5760d05492505b60008311611d6e5760405162461bcd60e51b815260206004820152601760248201527f4e6f207072656d69756d7320746f2077697468647261770000000000000000006044820152606401610838565b8260d06000828254611d809190615a7d565b92505081905550611e217f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611de357600080fd5b505afa158015611df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1b919061542c565b846135d4565b6040805160008152602081018590527fd60d524f1cae273480bb0a4ddfb992b6ac0b61c8e12ffbe2e4e31463f9e90199910160405180910390a15090919050565b60335460ff1615611e855760405162461bcd60e51b81526004016108389061585d565b42611e9861018083016101608401615733565b64ffffffffff161115611ee65760405162461bcd60e51b8152602060048201526016602482015275141bdb1a58de481b9bdd08195e1c1a5c9959081e595d60521b6044820152606401610838565b61103a611ef836839003830183615633565b6000600161284d565b60335460ff1615611f245760405162461bcd60e51b81526004016108389061585d565b61086c611f3636849003840184615633565b82600061284d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9757600080fd5b505afa158015611fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcf919061542c565b6001600160a01b0316336001600160a01b0316146120405760405162461bcd60e51b815260206004820152602860248201527f4f6e6c792061737365744d616e616765722063616e2063616c6c207468697320604482015267333ab731ba34b7b760c11b6064820152608401610838565b60335460ff16156120635760405162461bcd60e51b81526004016108389061585d565b80156120725761086c82613517565b61207b82612ed4565b505050565b6000808061208f60c985613241565b909250905060008160038111156120a8576120a8615b17565b146120b4575092915050565b5060009392505050565b6040516312d9a6ad60e01b8152600080516020615b9d83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906312d9a6ad9060440160006040518083038186803b15801561213457600080fd5b505afa158015612148573d6000803e3d6000fd5b50505050600a61215860c9612e7a565b106121af5760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d206e756d626572206f662045546f6b656e73207265616368656044820152601960fa1b6064820152608401610838565b6121ba60c983613980565b156122075760405162461bcd60e51b815260206004820152601a60248201527f65546f6b656e20616c726561647920696e2074686520706f6f6c0000000000006044820152606401610838565b6001600160a01b0382166122545760405162461bcd60e51b815260206004820152601460248201527365546f6b656e2063616e2774206265207a65726f60601b6044820152606401610838565b306001600160a01b0316826001600160a01b0316634d15eb036040518163ffffffff1660e01b815260040160206040518083038186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cf919061542c565b6001600160a01b0316146123255760405162461bcd60e51b815260206004820152601e60248201527f45546f6b656e206e6f74206c696e6b656420746f207468697320706f6f6c00006044820152606401610838565b61233260c983600161398c565b50816001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c60016040516119e0919061576a565b600080805b61237c60c9612e7a565b81101561242457600061239060c983613241565b509050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123cc57600080fd5b505afa1580156123e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612404919061550e565b61240e9084615a24565b925050808061241c90615ae6565b915050612372565b50919050565b6000610d3560c983613224565b600082815260cd60205260408120819061245190846139b2565b915091505b9250929050565b6000610d9c60c9612e7a565b600061247760335460ff1690565b156124945760405162461bcd60e51b81526004016108389061585d565b6000806124a260c986612ea1565b915091508180156124df575060018160038111156124c2576124c2615b17565b14806124df575060028160038111156124dd576124dd615b17565b145b61253d5760405162461bcd60e51b815260206004820152602960248201527f65546f6b656e206e6f7420666f756e64206f7220776974686472617773206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608401610838565b60405163f3fef3a360e01b8152336004820181905260248201869052906000906001600160a01b0388169063f3fef3a390604401602060405180830381600087803b15801561258b57600080fd5b505af115801561259f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c3919061550e565b905080156125d5576125d582826135d4565b9695505050505050565b60405163c5b8f5cf60e01b8152600080516020615be483398151915260048201819052600080516020615b9d8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561266c57600080fd5b505afa158015612680573d6000803e3d6000fd5b505050506126988460c961398090919063ffffffff16565b6126dc5760405162461bcd60e51b8152602060048201526015602482015274149a5cdac8135bd91d5b19481b9bdd08199bdd5b99605a1b6044820152606401610838565b60038360038111156126f0576126f0615b17565b1415806127a35750604051632474521560e21b8152600080516020615be483398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d148549060440160206040518083038186803b15801561276b57600080fd5b505afa15801561277f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a391906154f1565b6127f95760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920475541524449414e2063616e2073757370656e642065546f6b656e6044820152607360f81b6064820152608401610838565b61280560c9858561398c565b50836001600160a01b03167f84b036748e342a63da09ea533edd13275c8f2eb94ba67374cd3c7f4d6461d52c8460405161283f919061576a565b60405180910390a250505050565b612856836139c1565b610120830151818061287057506001600160a01b03811633145b6128bc5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520524d2063616e207265736f6c766520706f6c69636965736044820152606401610838565b8215806128d457504284610160015164ffffffffff16115b6129205760405162461bcd60e51b815260206004820152601860248201527f43616e277420706179206578706972656420706f6c69637900000000000000006044820152606401610838565b6040516310f199ef60e31b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063878ccf789060240160006040518083038186803b15801561298157600080fd5b505afa158015612995573d6000803e3d6000fd5b5050505083602001518311156129e65760405162461bcd60e51b81526020600482015260166024820152751c185e5bdd5d080f881c1bdb1a58de4b9c185e5bdd5d60521b6044820152606401610838565b600080841190508460a0015160ce6000828254612a039190615a7d565b909155506000905080612a17878488613a27565b915091508215612af0576000612a2d8884613b81565b90507f0000000000000000000000000000000000000000000000000000000000000000811115612a6357612a6081613d8d565b90505b7f0000000000000000000000000000000000000000000000000000000000000000811115612aea5760405162461bcd60e51b815260206004820152602e60248201527f446f6e2774206b6e6f7720776865726520746f2074616b65207468652072657360448201526d74206f6620746865206d6f6e657960901b6064820152608401610838565b50612afd565b612afa8782613eac565b90505b612b0681613517565b6060870151604051634e5de6c960e11b815260048101919091526001600160a01b03851690639cbbcd9290602401600060405180830381600087803b158015612b4e57600080fd5b505af1158015612b62573d6000803e3d6000fd5b5050505086600001518761012001516001600160a01b03167f54f4a270ea08f88dc23b2520d6b063fecb24d956c4496f447926d736338f545e88604051612bab91815260200190565b60405180910390a38651600090815260cc602090815260408083208390558951835260cd909152812090818181818181612be582826152ff565b50505050505050506000861115612c07578651612c02908761418e565b612c12565b8651612c129061438c565b50505050505050565b600081604051602001612c2e9190615920565b604051602081830303815290604052805190602001209050919050565b8051600090815260cd60205260408120815b612c6760c9612e7a565b811015612df057600080612c7c60c984613241565b90925090506001816003811115612c9557612c95615b17565b14612ca1575050612dde565b610120860151610160870151604051630cd21c5560e21b81526001600160a01b03928316600482015264ffffffffff90911660248201529083169063334871549060440160206040518083038186803b158015612cfd57600080fd5b505afa158015612d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3591906154f1565b612d40575050612dde565b6000826001600160a01b031663e5ae143f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d7b57600080fd5b505afa158015612d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db3919061550e565b905080612dc257505050612dde565b612dcc8187615a24565b9550612dd98584836144d2565b505050505b80612de881615ae6565b915050612c5d565b5061207b8360600151612e02856144df565b8484614539565b6040516001600160a01b0380851660248301528316604482015260648101829052612e749085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261468c565b50505050565b6000610d358261475e565b6000808080612e948686614769565b9097909650945050505050565b6000808080612eb08686614769565b9150915081816003811115612ec757612ec7615b17565b9350935050509250929050565b600060d0548211612efe578160d06000828254612ef19190615a7d565b9091555060009392505050565b60d05415612f1b5760d054612f139083615a7d565b600060d05591505b60cf5460ce541115612f725760cf5460ce54612f379190615a7d565b8211612f4f578160cf6000828254612ef19190615a24565b60cf5460ce54612f5f9190615a7d565b612f699083615a7d565b60ce5460cf5591505b5090565b60405163c5b8f5cf60e01b8152600080516020615be483398151915260048201819052600080516020615b9d8339815191526024830181905233604484015290916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c5b8f5cf9060640160006040518083038186803b15801561300357600080fd5b505afa158015612c12573d6000803e3d6000fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561304a5761207b836147ac565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561308357600080fd5b505afa9250505080156130b3575060408051601f3d908101601f191682019092526130b09181019061550e565b60015b6131165760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610838565b600080516020615b7d83398151915281146131855760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610838565b5061207b838383614848565b60335460ff166131da5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610838565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000613230838361486d565b6003811115610d1757610d17615b17565b6000808080612eb086866148e7565b600054610100900460ff166132775760405162461bcd60e51b8152600401610838906158d5565b565b600054610100900460ff166132a05760405162461bcd60e51b8152600401610838906158d5565b61327761491c565b600054610100900460ff166132c35760005460ff16156132c7565b303b155b6132e35760405162461bcd60e51b815260040161083890615887565b600054610100900460ff16158015613305576000805461ffff19166101011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561336057600080fd5b505af1158015613374573d6000803e3d6000fd5b5050505060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156133dc57600080fd5b505afa1580156133f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613414919061542c565b6001600160a01b0316146134905760405162461bcd60e51b815260206004820152603a60248201527f41737365744d616e616765722063616e277420626520736574206265666f726560448201527f20506f6c696379506f6f6c20696e697469616c697a6174696f6e0000000000006064820152608401610838565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663948cb7196040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156134eb57600080fd5b505af11580156134ff573d6000803e3d6000fd5b50505050801561103a576000805461ff001916905550565b8061351f5750565b8060cf5410613545578060cf600082825461353a9190615a7d565b9091555061103a9050565b60cf54156135625760cf5461355a9082615a7d565b600060cf5590505b8060d060008282546135749190615a24565b909155505050565b60335460ff161561359f5760405162461bcd60e51b81526004016108389061585d565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586132073390565b806135dd575050565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b15801561364157600080fd5b505afa158015613655573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613679919061542c565b6001600160a01b03161415801561369657508061369461494f565b105b1561378c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394217ad16040518163ffffffff1660e01b815260040160206040518083038186803b1580156136f457600080fd5b505afa158015613708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372c919061542c565b6001600160a01b0316631014a0c2826040518263ffffffff1660e01b815260040161375991815260200190565b600060405180830381600087803b15801561377357600080fd5b505af1158015613787573d6000803e3d6000fd5b505050505b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b1580156137f057600080fd5b505afa158015613804573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613828919061542c565b6001600160a01b03161415801561384557508061384361494f565b105b1561394c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631455cd286040518163ffffffff1660e01b815260040160206040518083038186803b1580156138a357600080fd5b505afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db919061542c565b6001600160a01b031663ee842dda6138f161494f565b6138fb9084615a7d565b6040518263ffffffff1660e01b815260040161391991815260200190565b600060405180830381600087803b15801561393357600080fd5b505af1158015613947573d6000803e3d6000fd5b505050505b61086c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836149e9565b6000610d178383614a19565b60006139aa84848460038111156139a5576139a5615b17565b614a25565b949350505050565b6000808080612e9486866148e7565b8051158015906139e857508051600090815260cc60205260409020546139e682612c1b565b145b61103a5760405162461bcd60e51b815260206004820152601060248201526f141bdb1a58de481b9bdd08199bdd5b9960821b6044820152606401610838565b60008060008060008615613b215787516040516331a9108f60e11b8152613adf916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636352211e91613a899160040190815260200190565b60206040518083038186803b158015613aa157600080fd5b505afa158015613ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad9919061542c565b876135d4565b858860a001511115613b0257858860a00151613afb9190615a7d565b9150613b74565b613b1a8860a0015187613b159190615a7d565b612ed4565b9250613b74565b8760a00151915060ce5460cf541115613b7457613b4d60ce5460cf54613b479190615a7d565b83614a4c565b90508060cf6000828254613b619190615a7d565b90915550613b7190508183615a7d565b91505b5090969095509350505050565b60008080613b8e856144df565b9050600080613b9c87614a5b565b8851600090815260cd602052604081209294509092505b613bbc82612e7a565b811015613d8057600080613bd084846139b2565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b158015613c1e57600080fd5b505af1158015613c32573d6000803e3d6000fd5b50505060608c0151613c4691508290614aa7565b90506001600160a01b03821663aa69d74b613c618784614ba7565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b158015613ca257600080fd5b505af1158015613cb6573d6000803e3d6000fd5b5050505060008a1115613d6b576000613ccf8b83614ba7565b604051630c1ceca560e21b815260048101829052600160248201529091506001600160a01b03841690633073b29490604401602060405180830381600087803b158015613d1b57600080fd5b505af1158015613d2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d53919061550e565b613d5d9082615a7d565b613d67908a615a24565b9850505b50508080613d7890615ae6565b915050613bb3565b5093979650505050505050565b6000805b613d9b60c9612e7a565b811015613ea557600080613db060c984613241565b90925090506001816003811115613dc957613dc9615b17565b14613dd5575050613e93565b604051630c1ceca560e21b815260048101869052600060248201526001600160a01b03831690633073b29490604401602060405180830381600087803b158015613e1e57600080fd5b505af1158015613e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e56919061550e565b613e609086615a7d565b94507f00000000000000000000000000000000000000000000000000000000000000008511613e90575050613ea5565b50505b80613e9d81615ae6565b915050613d91565b5090919050565b600080613eb8846144df565b9050600080613ec686614a5b565b8751600090815260cd602052604081209294509092505b613ee682612e7a565b81101561418257600080613efa84846139b2565b604051634438bcbb60e01b8152600481018a90526024810182905291935091506001600160a01b03831690634438bcbb90604401600060405180830381600087803b158015613f4857600080fd5b505af1158015613f5c573d6000803e3d6000fd5b50505060608b0151613f7091508290614aa7565b90506001600160a01b03821663aa69d74b613f8b8784614ba7565b6040516001600160e01b031960e084901b16815260048101919091528815156024820152604401600060405180830381600087803b158015613fcc57600080fd5b505af1158015613fe0573d6000803e3d6000fd5b5050505060008911801561406457506000826001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561402a57600080fd5b505afa15801561403e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614062919061550e565b115b1561416d5760a08a015160009061407b9083614ba7565b90506141008a6140fb856001600160a01b03166352a2783b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156140bd57600080fd5b505afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f5919061550e565b84614a4c565b614a4c565b604051631c0f4f8160e01b8152600481018290529091506001600160a01b03841690631c0f4f8190602401600060405180830381600087803b15801561414557600080fd5b505af1158015614159573d6000803e3d6000fd5b50505050808a6141699190615a7d565b9950505b5050808061417a90615ae6565b915050613edd565b50949695505050505050565b6040516331a9108f60e11b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156141f157600080fd5b505afa158015614205573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614229919061542c565b90506001600160a01b0381163b61423f57505050565b6001600160a01b03811663d6281d3e336040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044810186905260648101859052608401602060405180830381600087803b1580156142a457600080fd5b505af19250505080156142d4575060408051601f3d908101601f191682019092526142d191810190615527565b60015b61431c573d808015614302576040519150601f19603f3d011682016040523d82523d6000602084013e614307565b606091505b5080516143145750505050565b805181602001fd5b6001600160e01b03198116636b140e9f60e11b14612e745760405162461bcd60e51b815260206004820152602760248201527f496e76616c69642072657475726e2076616c75652066726f6d20506f6c696379604482015266102437b63232b960c91b6064820152608401610838565b6040516331a9108f60e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e9060240160206040518083038186803b1580156143ef57600080fd5b505afa158015614403573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614427919061542c565b90506001600160a01b0381163b61443c575050565b6001600160a01b03811663e8e617b7336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101859052606401602060405180830381600087803b15801561449a57600080fd5b505af19250505080156144ca575060408051601f3d908101601f191682019092526144c791810190615527565b60015b61207b575050565b60006139aa848484614a25565b6000610d3561453483606001518461014001518561016001516145029190615a94565b64ffffffffff166145139190615a5e565b61010085015161452e906a1a1601fc4ea7109e000000614ba7565b90614aa7565b614c78565b838210156145975760405162461bcd60e51b815260206004820152602560248201527f4e6f7420656e6f75676874206f6365616e20746f20636f7665722074686520706044820152646f6c69637960d81b6064820152608401610838565b8360005b6145a483612e7a565b81101561468457600080806145b986856139b2565b9150915060016145c887612e7a565b6145d29190615a7d565b8410156145ee576145e78761452e8b84614ba7565b92506145f2565b8492505b60405163837c83a360e01b815260048101899052602481018490526001600160a01b0383169063837c83a390604401600060405180830381600087803b15801561463b57600080fd5b505af115801561464f573d6000803e3d6000fd5b506146619250889150849050856144d2565b5061466c8386615a7d565b9450505050808061467c90615ae6565b91505061459b565b505050505050565b60006146e1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614cf69092919063ffffffff16565b80519091501561207b57808060200190518101906146ff91906154f1565b61207b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610838565b6000610d3582614d05565b6001600160a01b03811660009081526002830160205260408120548190806147a1576147958585614a19565b60009250925050612456565b600192509050612456565b6001600160a01b0381163b6148195760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610838565b600080516020615b7d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61485183614d0f565b60008251118061485e5750805b1561207b57612e748383614d4f565b6001600160a01b03811660009081526002830160205260408120548015158061489b575061489b8484614a19565b610d175760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610838565b600080806148f58585614e43565b6001600160a01b038116600090815260029690960160205260409095205494959350505050565b600054610100900460ff166149435760405162461bcd60e51b8152600401610838906158d5565b6033805460ff19169055565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156149b157600080fd5b505afa1580156149c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9c919061550e565b6040516001600160a01b03831660248201526044810182905261207b90849063a9059cbb60e01b90606401612e3d565b6000610d178383614e4f565b6001600160a01b038216600090815260028401602052604081208290556139aa8484614e71565b6000818310613ea55781610d17565b6000806000614a6984614e86565b90508084610100015110614a9457600181856101000151614a8a9190615a7d565b9250925050915091565b600084610100015182614a8a9190615a7d565b600081614af65760405162461bcd60e51b815260206004820152601860248201527f7761644469763a204469766973696f6e206279207a65726f00000000000000006044820152606401610838565b6000614b03600284615a3c565b9050670de0b6b3a7640000614b1a82600019615a7d565b614b249190615a3c565b841115614b7f5760405162461bcd60e51b8152602060048201526024808201527f7761644469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b6064820152608401610838565b8281614b93670de0b6b3a764000087615a5e565b614b9d9190615a24565b6139aa9190615a3c565b6000821580614bb4575081155b15614bc157506000610d35565b81614bd56002670de0b6b3a7640000615a3c565b614be190600019615a7d565b614beb9190615a3c565b831115614c465760405162461bcd60e51b8152602060048201526024808201527f7761644d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b6064820152608401610838565b670de0b6b3a7640000614c5a600282615a3c565b614c648486615a5e565b614c6e9190615a24565b610d179190615a3c565b600080614c89633b9aca0084615a5e565b905082614c9a633b9aca0083615a3c565b14610d355760405162461bcd60e51b815260206004820152602660248201527f776164546f5261643a204d617468204d756c7469706c69636174696f6e204f766044820152656572666c6f7760d01b6064820152608401610838565b60606139aa8484600085614eed565b6000610d35825490565b614d18816147ac565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b614db75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610838565b600080846001600160a01b031684604051614dd2919061574e565b600060405180830381855af49150503d8060008114614e0d576040519150601f19603f3d011682016040523d82523d6000602084013e614e12565b606091505b5091509150614e3a8282604051806060016040528060278152602001615bbd6027913961501e565b95945050505050565b6000610d178383615057565b6001600160a01b03811660009081526001830160205260408120541515610d17565b6000610d17836001600160a01b038416615081565b60008082610140015164ffffffffff1642614ea19190615a7d565b9050610d17614ee86e0612d847b578e7643c28ac00000000614ee2614ec5876144df565b614ecf9086615a5e565b614edc8860600151614c78565b906150d0565b9061518b565b61527f565b606082471015614f4e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610838565b6001600160a01b0385163b614fa55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610838565b600080866001600160a01b03168587604051614fc1919061574e565b60006040518083038185875af1925050503d8060008114614ffe576040519150601f19603f3d011682016040523d82523d6000602084013e615003565b606091505b509150915061501382828661501e565b979650505050505050565b6060831561502d575081610d17565b82511561503d5782518084602001fd5b8160405162461bcd60e51b81526004016108389190615792565b600082600001828154811061506e5761506e615b2d565b9060005260206000200154905092915050565b60008181526001830160205260408120546150c857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d35565b506000610d35565b60008215806150dd575081155b156150ea57506000610d35565b8161510260026b033b2e3c9fd0803ce8000000615a3c565b61510e90600019615a7d565b6151189190615a3c565b8311156151735760405162461bcd60e51b8152602060048201526024808201527f7261794d756c3a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b6064820152608401610838565b6b033b2e3c9fd0803ce8000000614c5a600282615a3c565b6000816151da5760405162461bcd60e51b815260206004820152601860248201527f7261794469763a204469766973696f6e206279207a65726f00000000000000006044820152606401610838565b60006151e7600284615a3c565b90506b033b2e3c9fd0803ce800000061520282600019615a7d565b61520c9190615a3c565b8411156152675760405162461bcd60e51b8152602060048201526024808201527f7261794469763a204d617468204d756c7469706c69636174696f6e204f766572604482015263666c6f7760e01b6064820152608401610838565b8281614b936b033b2e3c9fd0803ce800000087615a5e565b6000806152916002633b9aca00615a3c565b9050600061529f8483615a24565b9050818110156152f15760405162461bcd60e51b815260206004820181905260248201527f726179546f5761643a204d617468204164646974696f6e204f766572666c6f776044820152606401610838565b6139aa633b9aca0082615a3c565b508054600082559060005260206000209081019061103a91905b80821115612f725760008155600101615319565b8035610f5881615b59565b6000610180828403121561242457600080fd5b6000610180828403121561535e57600080fd5b6153666159c9565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206153cc81840161532d565b908201526101406153de8382016153fa565b908201526101606153f08382016153fa565b9082015292915050565b803564ffffffffff81168114610f5857600080fd5b60006020828403121561542157600080fd5b8135610d1781615b59565b60006020828403121561543e57600080fd5b8151610d1781615b59565b6000806040838503121561545c57600080fd5b823561546781615b59565b915060208381013567ffffffffffffffff8082111561548557600080fd5b818601915086601f83011261549957600080fd5b8135818111156154ab576154ab615b43565b6154bd601f8201601f191685016159f3565b915080825287848285010111156154d357600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561550357600080fd5b8151610d1781615b6e565b60006020828403121561552057600080fd5b5051919050565b60006020828403121561553957600080fd5b81516001600160e01b031981168114610d1757600080fd5b6000806040838503121561556457600080fd5b823561556f81615b59565b915060208301356004811061558357600080fd5b809150509250929050565b600080604083850312156155a157600080fd5b82356155ac81615b59565b946020939093013593505050565b600061018082840312156155cd57600080fd5b610d178383615338565b6000806101a083850312156155eb57600080fd5b6155f58484615338565b915061018083013561558381615b6e565b6000806101a0838503121561561a57600080fd5b6156248484615338565b94610180939093013593505050565b6000610180828403121561564657600080fd5b610d17838361534b565b60008060006101c0848603121561566657600080fd5b615670858561534b565b925061018084013561568181615b59565b91506101a08401356bffffffffffffffffffffffff811681146156a357600080fd5b809150509250925092565b6000602082840312156156c057600080fd5b5035919050565b600080604083850312156156da57600080fd5b82359150602083013561558381615b6e565b600080604083850312156156ff57600080fd5b82359150602083013561558381615b59565b6000806040838503121561572457600080fd5b50508035926020909101359150565b60006020828403121561574557600080fd5b610d17826153fa565b60008251615760818460208701615aba565b9190910192915050565b602081016004831061578c57634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600082518060208401526157b1816040850160208701615aba565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600061018082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e08301526101008084015181840152506101208084015161599a828501826001600160a01b03169052565b50506101408381015164ffffffffff81168483015250506101608381015164ffffffffff811684830152610d75565b604051610180810167ffffffffffffffff811182821017156159ed576159ed615b43565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615a1c57615a1c615b43565b604052919050565b60008219821115615a3757615a37615b01565b500190565b600082615a5957634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615a7857615a78615b01565b500290565b600082821015615a8f57615a8f615b01565b500390565b600064ffffffffff83811690831681811015615ab257615ab2615b01565b039392505050565b60005b83811015615ad5578181015183820152602001615abd565b83811115612e745750506000910152565b6000600019821415615afa57615afa615b01565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461103a57600080fd5b801515811461103a57600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcbf372ca3ebecfe59ac256f17697941bbe63302aced610e8b0e3646f743c7beb2416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656455435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041a2646970667358221220da7b4e1ee4e9175312c4e092e4bc542f6bb2b694c1b882cb66955e63b17a8a4864736f6c63430008060033",
|
|
1255
1167
|
"linkReferences": {},
|
|
1256
1168
|
"deployedLinkReferences": {}
|
|
1257
1169
|
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_format": "hh-sol-artifact-1",
|
|
3
|
+
"contractName": "IPolicyHolder",
|
|
4
|
+
"sourceName": "interfaces/IPolicyHolder.sol",
|
|
5
|
+
"abi": [
|
|
6
|
+
{
|
|
7
|
+
"inputs": [
|
|
8
|
+
{
|
|
9
|
+
"internalType": "address",
|
|
10
|
+
"name": "operator",
|
|
11
|
+
"type": "address"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"internalType": "address",
|
|
15
|
+
"name": "from",
|
|
16
|
+
"type": "address"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"internalType": "uint256",
|
|
20
|
+
"name": "tokenId",
|
|
21
|
+
"type": "uint256"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"internalType": "bytes",
|
|
25
|
+
"name": "data",
|
|
26
|
+
"type": "bytes"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"name": "onERC721Received",
|
|
30
|
+
"outputs": [
|
|
31
|
+
{
|
|
32
|
+
"internalType": "bytes4",
|
|
33
|
+
"name": "",
|
|
34
|
+
"type": "bytes4"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"stateMutability": "nonpayable",
|
|
38
|
+
"type": "function"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"inputs": [
|
|
42
|
+
{
|
|
43
|
+
"internalType": "address",
|
|
44
|
+
"name": "operator",
|
|
45
|
+
"type": "address"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"internalType": "address",
|
|
49
|
+
"name": "from",
|
|
50
|
+
"type": "address"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"internalType": "uint256",
|
|
54
|
+
"name": "policyId",
|
|
55
|
+
"type": "uint256"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"internalType": "uint256",
|
|
59
|
+
"name": "amount",
|
|
60
|
+
"type": "uint256"
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"name": "onPayoutReceived",
|
|
64
|
+
"outputs": [
|
|
65
|
+
{
|
|
66
|
+
"internalType": "bytes4",
|
|
67
|
+
"name": "",
|
|
68
|
+
"type": "bytes4"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"stateMutability": "nonpayable",
|
|
72
|
+
"type": "function"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"inputs": [
|
|
76
|
+
{
|
|
77
|
+
"internalType": "address",
|
|
78
|
+
"name": "operator",
|
|
79
|
+
"type": "address"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"internalType": "address",
|
|
83
|
+
"name": "from",
|
|
84
|
+
"type": "address"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"internalType": "uint256",
|
|
88
|
+
"name": "policyId",
|
|
89
|
+
"type": "uint256"
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"name": "onPolicyExpired",
|
|
93
|
+
"outputs": [
|
|
94
|
+
{
|
|
95
|
+
"internalType": "bytes4",
|
|
96
|
+
"name": "",
|
|
97
|
+
"type": "bytes4"
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"stateMutability": "nonpayable",
|
|
101
|
+
"type": "function"
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"bytecode": "0x",
|
|
105
|
+
"deployedBytecode": "0x",
|
|
106
|
+
"linkReferences": {},
|
|
107
|
+
"deployedLinkReferences": {}
|
|
108
|
+
}
|
package/contracts/PolicyPool.sol
CHANGED
|
@@ -14,6 +14,7 @@ import {IInsolvencyHook} from "../interfaces/IInsolvencyHook.sol";
|
|
|
14
14
|
import {IPolicyPoolComponent} from "../interfaces/IPolicyPoolComponent.sol";
|
|
15
15
|
import {IEToken} from "../interfaces/IEToken.sol";
|
|
16
16
|
import {IPolicyNFT} from "../interfaces/IPolicyNFT.sol";
|
|
17
|
+
import {IPolicyHolder} from "../interfaces/IPolicyHolder.sol";
|
|
17
18
|
import {IAssetManager} from "../interfaces/IAssetManager.sol";
|
|
18
19
|
import {Policy} from "./Policy.sol";
|
|
19
20
|
import {WadRayMath} from "./WadRayMath.sol";
|
|
@@ -45,7 +46,6 @@ contract PolicyPool is IPolicyPool, PausableUpgradeable, UUPSUpgradeable {
|
|
|
45
46
|
// solhint-disable-next-line var-name-mixedcase
|
|
46
47
|
uint256 public immutable NEGLIGIBLE_AMOUNT; // init as 10**(decimals-3) == 0.001 USD
|
|
47
48
|
|
|
48
|
-
bytes32 public constant REBALANCE_ROLE = keccak256("REBALANCE_ROLE");
|
|
49
49
|
bytes32 public constant WITHDRAW_WON_PREMIUMS_ROLE = keccak256("WITHDRAW_WON_PREMIUMS_ROLE");
|
|
50
50
|
|
|
51
51
|
bytes32 public constant GUARDIAN_ROLE = keccak256("GUARDIAN_ROLE");
|
|
@@ -466,19 +466,46 @@ contract PolicyPool is IPolicyPool, PausableUpgradeable, UUPSUpgradeable {
|
|
|
466
466
|
delete _policies[policy.id];
|
|
467
467
|
delete _policiesFunds[policy.id];
|
|
468
468
|
if (payout > 0) {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
469
|
+
_notifyPayout(policy.id, payout);
|
|
470
|
+
} else {
|
|
471
|
+
_notifyExpiration(policy.id);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
function _notifyPayout(uint256 policyId, uint256 payout) internal {
|
|
476
|
+
address customer = _policyNFT.ownerOf(policyId);
|
|
477
|
+
if (!AddressUpgradeable.isContract(customer)) return;
|
|
478
|
+
try
|
|
479
|
+
IPolicyHolder(customer).onPayoutReceived(_msgSender(), address(this), policyId, payout)
|
|
480
|
+
returns (bytes4 retval) {
|
|
481
|
+
require(
|
|
482
|
+
retval == IPolicyHolder.onPayoutReceived.selector,
|
|
483
|
+
"Invalid return value from Policy Holder"
|
|
484
|
+
);
|
|
485
|
+
} catch (bytes memory reason) {
|
|
486
|
+
if (reason.length == 0) {
|
|
487
|
+
return; // Not implemented, it's fine
|
|
488
|
+
} else {
|
|
489
|
+
// solhint-disable-next-line no-inline-assembly
|
|
490
|
+
assembly {
|
|
491
|
+
revert(add(32, reason), mload(reason))
|
|
492
|
+
}
|
|
478
493
|
}
|
|
479
494
|
}
|
|
480
495
|
}
|
|
481
496
|
|
|
497
|
+
function _notifyExpiration(uint256 policyId) internal {
|
|
498
|
+
address customer = _policyNFT.ownerOf(policyId);
|
|
499
|
+
if (!AddressUpgradeable.isContract(customer)) return;
|
|
500
|
+
try IPolicyHolder(customer).onPolicyExpired(_msgSender(), address(this), policyId) returns (
|
|
501
|
+
bytes4
|
|
502
|
+
) {
|
|
503
|
+
return;
|
|
504
|
+
} catch {
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
482
509
|
function _interestAdjustment(Policy.PolicyData memory policy)
|
|
483
510
|
internal
|
|
484
511
|
view
|
|
@@ -622,40 +649,6 @@ contract PolicyPool is IPolicyPool, PausableUpgradeable, UUPSUpgradeable {
|
|
|
622
649
|
return amount;
|
|
623
650
|
}
|
|
624
651
|
|
|
625
|
-
function rebalancePolicy(Policy.PolicyData calldata policy)
|
|
626
|
-
external
|
|
627
|
-
onlyRole(REBALANCE_ROLE)
|
|
628
|
-
whenNotPaused
|
|
629
|
-
{
|
|
630
|
-
_validatePolicy(policy);
|
|
631
|
-
DataTypes.ETokenToWadMap storage policyFunds = _policiesFunds[policy.id];
|
|
632
|
-
uint256 ocean = 0;
|
|
633
|
-
|
|
634
|
-
// Iterates all the tokens
|
|
635
|
-
// If locked - unlocks - finally stores the available ocean in policyFunds
|
|
636
|
-
for (uint256 i = 0; i < _eTokens.length(); i++) {
|
|
637
|
-
(IEToken etk, DataTypes.ETokenStatus etkStatus) = _eTokens.at(i);
|
|
638
|
-
uint256 etkOcean = 0;
|
|
639
|
-
(bool locked, uint256 etkScr) = policyFunds.tryGet(etk);
|
|
640
|
-
if (locked) {
|
|
641
|
-
etk.unlockScr(policy.interestRate(), etkScr);
|
|
642
|
-
}
|
|
643
|
-
if (
|
|
644
|
-
etkStatus == DataTypes.ETokenStatus.active &&
|
|
645
|
-
etk.accepts(address(policy.riskModule), policy.expiration)
|
|
646
|
-
) etkOcean = etk.oceanForNewScr();
|
|
647
|
-
if (etkOcean == 0) {
|
|
648
|
-
if (locked) policyFunds.remove(etk);
|
|
649
|
-
} else {
|
|
650
|
-
policyFunds.set(etk, etkOcean);
|
|
651
|
-
ocean += etkOcean;
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
_distributeScr(policy.scr, policy.interestRate(), ocean, policyFunds);
|
|
656
|
-
emit PolicyRebalanced(policy.riskModule, policy.id);
|
|
657
|
-
}
|
|
658
|
-
|
|
659
652
|
function getInvestable() external view override returns (uint256) {
|
|
660
653
|
uint256 borrowedFromEtk = 0;
|
|
661
654
|
for (uint256 i = 0; i < _eTokens.length(); i++) {
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
pragma solidity ^0.8.0;
|
|
3
|
+
|
|
4
|
+
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @title Policy holder interface
|
|
8
|
+
* @dev Interface for any contract that wants to be a holder of Ensuro Policies and receive the payouts
|
|
9
|
+
*/
|
|
10
|
+
interface IPolicyHolder is IERC721Receiver {
|
|
11
|
+
/**
|
|
12
|
+
* @dev Whenever an Policy is expired or resolved with payout = 0, this function is called
|
|
13
|
+
*
|
|
14
|
+
* It should return its Solidity selector to confirm the payout.
|
|
15
|
+
* If interface is not implemented by the recipient, it will be ignored and the payout will be successful.
|
|
16
|
+
* No mather what's the return value or even if this function reverts, this function will not revert the policy
|
|
17
|
+
* expiration.
|
|
18
|
+
*
|
|
19
|
+
* The selector can be obtained in Solidity with `IPolicyPool.onPolicyExpired.selector`.
|
|
20
|
+
*/
|
|
21
|
+
function onPolicyExpired(
|
|
22
|
+
address operator,
|
|
23
|
+
address from,
|
|
24
|
+
uint256 policyId
|
|
25
|
+
) external returns (bytes4);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @dev Whenever an Policy is resolved with payout > 0, this function is called
|
|
29
|
+
*
|
|
30
|
+
* It must return its Solidity selector to confirm the payout.
|
|
31
|
+
* If interface is not implemented by the recipient, it will be ignored and the payout will be successful.
|
|
32
|
+
* If any other value is returned or it reverts, the policy resolution / payout will be reverted.
|
|
33
|
+
*
|
|
34
|
+
* The selector can be obtained in Solidity with `IPolicyPool.onPayoutReceived.selector`.
|
|
35
|
+
*/
|
|
36
|
+
function onPayoutReceived(
|
|
37
|
+
address operator,
|
|
38
|
+
address from,
|
|
39
|
+
uint256 policyId,
|
|
40
|
+
uint256 amount
|
|
41
|
+
) external returns (bytes4);
|
|
42
|
+
}
|