{
    "_format": "hh-sol-artifact-1",
    "contractName": "Obligation",
    "sourceName": "contracts/Obligation.sol",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "buyer",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "seller",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "ExecuteExercise",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "seller",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Refund",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "buyer",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "seller",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "id",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "RequestExercise",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "seller",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "pool",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "Withdraw",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "allWriters",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "",
                    "type": "address[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "available",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "satoshis",
                    "type": "uint256"
                }
            ],
            "name": "calculateAmountIn",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "calculateAmountOut",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "canExit",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "id",
                    "type": "bytes32"
                },
                {
                    "internalType": "uint32",
                    "name": "height",
                    "type": "uint32"
                },
                {
                    "internalType": "uint256",
                    "name": "index",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes32",
                    "name": "txid",
                    "type": "bytes32"
                },
                {
                    "internalType": "bytes",
                    "name": "header",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "proof",
                    "type": "bytes"
                },
                {
                    "internalType": "bytes",
                    "name": "rawtx",
                    "type": "bytes"
                }
            ],
            "name": "executeExercise",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "expiryTime",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "getBtcAddress",
            "outputs": [
                {
                    "internalType": "bytes20",
                    "name": "btcHash",
                    "type": "bytes20"
                },
                {
                    "internalType": "enum Bitcoin.Script",
                    "name": "format",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getDetails",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "_expiryTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_windowSize",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_strikePrice",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_decimals",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "_collateral",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_option",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint8",
                    "name": "_decimals",
                    "type": "uint8"
                },
                {
                    "internalType": "uint256",
                    "name": "_expiryTime",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_windowSize",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "_strikePrice",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "_option",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_referee",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_treasury",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "_uniswap",
                    "type": "address"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "writer",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "mintToPool",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "writer",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "mintToWriter",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "obligations",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "option",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "referee",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "seller",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "satoshis",
                    "type": "uint256"
                }
            ],
            "name": "requestExercise",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes20",
                    "name": "btcHash",
                    "type": "bytes20"
                },
                {
                    "internalType": "enum Bitcoin.Script",
                    "name": "format",
                    "type": "uint8"
                }
            ],
            "name": "setBtcAddress",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "strikePrice",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "treasury",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "uniswap",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "windowSize",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "pool",
                    "type": "address"
                }
            ],
            "name": "withdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b5060006100246001600160e01b0361007716565b600280546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061007b565b3390565b613114806200008b6000396000f3fe608060405234801561001057600080fd5b50600436106102055760003560e01c80636e1853261161011a57806399bc0aea116100ad578063d52131dc1161007c578063d52131dc1461071b578063dd62ed3e14610776578063f2fde38b146107a4578063f9a1e8f9146107ca578063fbbf93a0146107f657610205565b806399bc0aea146105ad578063a8fe1d82146105b5578063a9059cbb146106e7578063c52987cf1461071357610205565b80638a14117a116100e95780638a14117a146105785780638da5cb5b1461058057806395d89b41146105885780639721f2901461059057610205565b80636e185326146104fd57806370a082311461051a578063715018a6146105405780638870aab41461054857610205565b80632681f7e41161019d5780633451c9231161016c5780633451c923146104935780633b1bebd1146104b957806341ffb72e146104c15780635e4a6792146104c957806361d027b3146104f557610205565b80632681f7e4146103e757806326dcf4da146103ef5780632fdf8fb114610449578063313ce5671461047557610205565b8063095ea7b3116101d9578063095ea7b31461033157806310098ad51461037157806318160ddd146103a957806323b872dd146103b157610205565b8062f714ce1461020a578063010035af146102385780630178f1b91461025c57806306fdde03146102b4575b600080fd5b6102366004803603604081101561022057600080fd5b50803590602001356001600160a01b031661083d565b005b610240610ae3565b604080516001600160a01b039092168252519081900360200190f35b610264610af2565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102a0578181015183820152602001610288565b505050509050019250505060405180910390f35b6102bc610b55565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f65781810151838201526020016102de565b50505050905090810190601f1680156103235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61035d6004803603604081101561034757600080fd5b506001600160a01b038135169060200135610be3565b604080519115158252519081900360200190f35b6103976004803603602081101561038757600080fd5b50356001600160a01b0316610c70565b60408051918252519081900360200190f35b610397610ca3565b61035d600480360360608110156103c757600080fd5b506001600160a01b03813581169160208101359091169060400135610ca9565b610240610da5565b610236600480360361010081101561040657600080fd5b5060ff813516906020810135906040810135906060810135906001600160a01b03608082013581169160a081013582169160c082013581169160e0013516610db4565b6102366004803603604081101561045f57600080fd5b506001600160a01b038135169060200135611072565b61047d611164565b6040805160ff9092168252519081900360200190f35b610397600480360360208110156104a957600080fd5b50356001600160a01b031661116d565b610240611188565b61035d611197565b610236600480360360408110156104df57600080fd5b506001600160a01b0381351690602001356111b7565b6102406114c9565b6103976004803603602081101561051357600080fd5b50356114d8565b6103976004803603602081101561053057600080fd5b50356001600160a01b0316611502565b61023661151d565b6102366004803603604081101561055e57600080fd5b5080356001600160601b031916906020013560ff166115d1565b610397611657565b61024061165d565b6102bc61166c565b610397600480360360208110156105a657600080fd5b50356116c7565b6103976116e6565b610236600480360360e08110156105cb57600080fd5b81359163ffffffff6020820135169160408201359160608101359181019060a08101608082013564010000000081111561060457600080fd5b82018360208201111561061657600080fd5b8035906020019184600183028401116401000000008311171561063857600080fd5b91939092909160208101903564010000000081111561065657600080fd5b82018360208201111561066857600080fd5b8035906020019184600183028401116401000000008311171561068a57600080fd5b9193909290916020810190356401000000008111156106a857600080fd5b8201836020820111156106ba57600080fd5b803590602001918460018302840111640100000000831117156106dc57600080fd5b5090925090506116ec565b61035d600480360360408110156106fd57600080fd5b506001600160a01b038135169060200135611a11565b610397611a94565b6107416004803603602081101561073157600080fd5b50356001600160a01b0316611a9a565b6040516001600160601b0319831681526020810182600281111561076157fe5b60ff1681526020019250505060405180910390f35b6103976004803603604081101561078c57600080fd5b506001600160a01b0381358116916020013516611aaf565b610236600480360360208110156107ba57600080fd5b50356001600160a01b0316611ada565b610236600480360360408110156107e057600080fd5b506001600160a01b038135169060200135611be5565b6107fe611d77565b6040805196875260208701959095528585019390935260608501919091526001600160a01b0390811660808501521660a0830152519081900360c00190f35b60005442111560405180604001604052806014815260200160008051602061300f833981519152815250906108f05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108b557818101518382015260200161089d565b50505050905090810190601f1680156108e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506001600160a01b03811660009081526014602090815260408083203380855290835292819020548151808301909252601982527f496e73756666696369656e7420706f6f6c2062616c616e6365000000000000009282019290925261095f908290869063ffffffff611e2b16565b6001600160a01b038085166000818152601460209081526040808320948816835293815283822094909455908152601083528181205460139093529081205490916109b0919063ffffffff611e8516565b90506109fc856040518060400160405280601681526020017f496e73756666696369656e7420617661696c61626c650000000000000000000081525083611e2b9092919063ffffffff16565b6001600160a01b038516600090815260136020526040902055610a1f8386611ece565b600b5460408051638bfb07c960e01b81526001600160a01b038681166004830181905260248301526044820189905291519190921691638bfb07c991606480830192600092919082900301818387803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b5050604080516001600160a01b038881168252602082018a9052825190881694507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb93509081900390910190a25050505050565b6009546001600160a01b031681565b60606003805480602002602001604051908101604052809291908181526020018280548015610b4a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b2c575b505050505090505b90565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b820191906000526020600020905b815481529060010190602001808311610bbe57829003601f168201915b505050505081565b6000805442111560405180604001604052806014815260200160008051602061300f83398151915281525090610c5a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50610c66338484611f9c565b5060015b92915050565b6001600160a01b0381166000908152600f60209081526040808320546011909252822054610c6a9163ffffffff611e8516565b60125481565b6000805442111560405180604001604052806014815260200160008051602061300f83398151915281525090610d205760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50610d2c848484612112565b6040805180820182526016815275416d6f756e7420657863656564732062616c616e636560501b6020808301919091526001600160a01b0387166000908152601582528381203380835292529290922054610d9b9287929091610d9691879063ffffffff611e2b16565b611f9c565b5060019392505050565b600c546001600160a01b031681565b610dbc61273a565b6002546001600160a01b03908116911614610e1e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b86864282116040518060400160405280601381526020017210d85b9b9bdd081a5b9a5d08195e1c1a5c9959606a1b81525090610e9b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060408051808201909152601581527f57696e646f772063616e6e6f74206265207a65726f0000000000000000000000602082015281610f1c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506000829055600181905560408051808201909152601e81527f5265717569726573206e6f6e2d7a65726f20737472696b652070726963650000602082015287610fa75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060408051808201909152600a8082526927b13634b3b0ba34b7b760b11b6020909201918252610fd991600591612f5f565b506040805180820190915260038082526213d09360ea1b602090920191825261100491600691612f5f565b50506007805460ff191660ff9a909a1699909917909855600894909455600980546001600160a01b03199081166001600160a01b0395861617909155600a8054821693851693909317909255600b80548316918416919091179055600c805490911691909216179055505050565b60005442111560405180604001604052806014815260200160008051602061300f833981519152815250906110e85760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506110f3828261273e565b60095460408051632fdf8fb160e01b81526001600160a01b0385811660048301526024820185905291519190921691632fdf8fb191604480830192600092919082900301818387803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050505050565b60075460ff1681565b6001600160a01b031660009081526011602052604090205490565b600a546001600160a01b031681565b60006111b06001546000546128ee90919063ffffffff16565b4211905090565b60005442116040518060400160405280601481526020017310dbdb9d1c9858dd081b9bdd08195e1c1a5c995960621b815250906112355760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060015460005461124b9163ffffffff6128ee16565b42111560405180604001604052806014815260200160008051602061300f833981519152815250906112be5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b503360006112cb836114d8565b6001600160a01b0385166000908152600f60205260409020549091506112f7908263ffffffff6128ee16565b6001600160a01b0385166000908152600f60208181526040808420859055601182529283902054918152825160608101909352602380845291909311159261307a90830139906113885760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50600d54604080513060601b60208083019190915260348083018590528351808403909101815260549092019092528051910120906113ce90600163ffffffff6128ee16565b600d556000818152600e60209081526040918290208481556001810180546001600160a01b03199081166001600160a01b0389811691821790935560029093018054909116918a16918217905583518581529283018690528351909391927f307a917ef57cbae93b7652ce4ba45aa7bb756907adb4508280e5cc0bca6a3d5692908290030190a360095460408051632f2533c960e11b81526001600160a01b0386811660048301526024820186905291519190921691635e4a679291604480830192600092919082900301818387803b1580156114aa57600080fd5b505af11580156114be573d6000803e3d6000fd5b505050505050505050565b600b546001600160a01b031681565b6000610c6a600a800a6114f66008548561294890919063ffffffff16565b9063ffffffff6129a116565b6001600160a01b031660009081526010602052604090205490565b61152561273a565b6002546001600160a01b03908116911614611587576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b60005442111560405180604001604052806014815260200160008051602061300f833981519152815250906116475760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506116533383836129e3565b5050565b60015481565b6002546001600160a01b031690565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b600854600090610c6a906114f6846402540be40063ffffffff61294816565b60005481565b60005442116040518060400160405280601481526020017310dbdb9d1c9858dd081b9bdd08195e1c1a5c995960621b8152509061176a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506001546000546117809163ffffffff6128ee16565b42111560405180604001604052806014815260200160008051602061300f833981519152815250906117f35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060008a8152600e60205260409020600201546001600160a01b0316611817612fdd565b6001600160a01b03821660009081526004602090815260409182902082518084019093528054606081901b6001600160601b03191684529091830190600160a01b900460ff16600281111561186857fe5b600281111561187357fe5b8152505090506000600a60009054906101000a90046001600160a01b03166001600160a01b031663eef421ab8e8e8e8e8e8e8e8e8e8e8d600001518e602001516040518d63ffffffff1660e01b8152600401808d81526020018c63ffffffff1663ffffffff1681526020018b81526020018a8152602001806020018060200180602001866bffffffffffffffffffffffff19166bffffffffffffffffffffffff1916815260200185600281111561192657fe5b60ff16815260200184810384528c8c82818152602001925080828437600083820152601f01601f191690910185810384528a815260200190508a8a80828437600083820152601f01601f191690910185810383528881526020019050888880828437600081840152601f19601f8201169050808301925050509f50505050505050505050505050505050602060405180830381600087803b1580156119ca57600080fd5b505af11580156119de573d6000803e3d6000fd5b505050506040513d60208110156119f457600080fd5b50519050611a028d82612ac0565b50505050505050505050505050565b6000805442111560405180604001604052806014815260200160008051602061300f83398151915281525090611a885760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50610c66338484612112565b60085481565b600080611aa683612d35565b91509150915091565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b611ae261273a565b6002546001600160a01b03908116911614611b44576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116611b895760405162461bcd60e51b815260040180806020018281038252602681526020018061302f6026913960400191505060405180910390fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b60005442111560405180604001604052806014815260200160008051602061300f83398151915281525090611c5b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50611c66828261273e565b600b546040805163d8dfeb4560e01b815290516000926001600160a01b03169163d8dfeb45916004808301926020929190829003018186803b158015611cab57600080fd5b505afa158015611cbf573d6000803e3d6000fd5b505050506040513d6020811015611cd557600080fd5b5051600c54600954919250600091611cfa916001600160a01b03908116911684612d61565b60095460408051638f033bd960e01b81526001600160a01b0388811660048301528085166024830152604482018890529151939450911691638f033bd99160648082019260009290919082900301818387803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b5050505050505050565b6000806000806000806000600b60009054906101000a90046001600160a01b03166001600160a01b031663d8dfeb456040518163ffffffff1660e01b815260040160206040518083038186803b158015611dd057600080fd5b505afa158015611de4573d6000803e3d6000fd5b505050506040513d6020811015611dfa57600080fd5b5051600054600154600854600754600954939c929b5090995060ff1697509195506001600160a01b03169350915050565b60008184841115611e7d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b505050900390565b6000611ec783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e2b565b9392505050565b6040805180820182526016815275416d6f756e7420657863656564732062616c616e636560501b6020808301919091526001600160a01b038516600090815260119091529190912054611f2891839063ffffffff611e2b16565b6001600160a01b038316600090815260116020526040902055601254611f54908263ffffffff611e8516565b6012556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60408051808201909152601981527f417070726f76652066726f6d207a65726f20616464726573730000000000000060208201526001600160a01b0384166120255760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060408051808201909152601781527f417070726f766520746f207a65726f206164647265737300000000000000000060208201526001600160a01b0383166120af5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506001600160a01b03808416600081815260156020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60408051808201909152601a81527f5472616e736665722066726f6d207a65726f206164647265737300000000000060208201526001600160a01b03841661219b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060408051808201909152601881527f5472616e7366657220746f207a65726f2061646472657373000000000000000060208201526001600160a01b0383166122255760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506040805180820182526016815275416d6f756e7420657863656564732062616c616e636560501b6020808301919091526001600160a01b03861660009081526010909152919091205461228091839063ffffffff611e2b16565b6001600160a01b0380851660009081526010602052604080822093909355908416815220546122b5908263ffffffff6128ee16565b6001600160a01b0383811660009081526010602090815260408083209490945591861681526004909152205460601b6001600160601b0319161580159061232057506001600160a01b03821660009081526004602052604090205460601b6001600160601b03191615155b156124d757600b546040805163282d3fdf60e01b81526001600160a01b03858116600483015260248201859052825193169263282d3fdf926044808401939192918290030181600087803b15801561237757600080fd5b505af115801561238b573d6000803e3d6000fd5b505050506040513d60408110156123a157600080fd5b5050600b5460408051638bfb07c960e01b81526001600160a01b038681166004830181905260248301526044820185905291519190921691638bfb07c991606480830192600092919082900301818387803b1580156123ff57600080fd5b505af1158015612413573d6000803e3d6000fd5b5050506001600160a01b03841660009081526011602052604090205461244091508263ffffffff611e8516565b6001600160a01b038085166000908152601160205260408082209390935590841681522054612475908263ffffffff6128ee16565b6001600160a01b0383166000818152601160205260408120929092556003805460018101825592527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b03191690911790556126ea565b6001600160a01b03831660009081526004602052604090205460601b6001600160601b0319161580159061252e57506001600160a01b03821660009081526004602052604090205460601b6001600160601b031916155b156125c9576001600160a01b03821660009081526013602052604090205461255c908263ffffffff6128ee16565b6001600160a01b0380841660009081526013602090815260408083209490945560148152838220928716825291909152205461259e908263ffffffff6128ee16565b6001600160a01b038084166000908152601460209081526040808320938816835292905220556126ea565b600b546040805163282d3fdf60e01b81526001600160a01b038581166004830152602482018590528251600094859492169263282d3fdf92604480830193919282900301818787803b15801561261e57600080fd5b505af1158015612632573d6000803e3d6000fd5b505050506040513d604081101561264857600080fd5b50805160209091015190925090506126618483836129e3565b6001600160a01b03841660009081526011602052604090205461268a908463ffffffff6128ee16565b6001600160a01b0385166000818152601160205260408120929092556003805460018101825592527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b031916909117905550505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3390565b6001600160a01b038216600090815260106020526040902054612767908263ffffffff6128ee16565b6001600160a01b03831660009081526010602090815260408083209390935560119052205461279c908263ffffffff6128ee16565b6001600160a01b0383166000908152601160205260409020556012546127c8908263ffffffff6128ee16565b6012556003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03858116918217909255600b546040805163282d3fdf60e01b815260048101939093526024830186905280518594929092169263282d3fdf926044808301939282900301818787803b15801561286457600080fd5b505af1158015612878573d6000803e3d6000fd5b505050506040513d604081101561288e57600080fd5b50805160209091015190925090506128a78483836129e3565b6040805184815290516001600160a01b038616916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350505050565b600082820183811015611ec7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261295757506000610c6a565b8282028284828161296457fe5b0414611ec75760405162461bcd60e51b815260040180806020018281038252602181526020018061309d6021913960400191505060405180910390fd5b6000611ec783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e1c565b60408051808201909152601c81527f43616e6e6f742073657420656d7074792042544320616464726573730000000060208201526001600160601b03198316612a6d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506001600160a01b038316600090815260046020526040902080546001600160a01b031916606084901c1780825582919060ff60a01b1916600160a01b836002811115612ab657fe5b0217905550505050565b6000600e6000848152602001908152602001600020600001549050600081116040518060600160405280602181526020016130be6021913990612b445760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506000612b50836114d8565b90508082146040518060400160405280601581526020017f496e76616c6964206f757470757420616d6f756e74000000000000000000000081525090612bd75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506000848152600e6020908152604080832060018101546002909101546001600160a01b03908116808652600f9094529190932054921691612c1f908563ffffffff611e8516565b6001600160a01b0382166000908152600f6020908152604080832093909355888252600e90529081209081556001810180546001600160a01b0319908116909155600290910180549091169055612c768185611ece565b600b5460408051638bfb07c960e01b81526001600160a01b03848116600483015285811660248301526044820188905291519190921691638bfb07c991606480830192600092919082900301818387803b158015612cd357600080fd5b505af1158015612ce7573d6000803e3d6000fd5b50506040805187815290516001600160a01b038086169450861692507f525a3f1fcdea62b71309cb54f24087a33523bfd0055b0f04651922f002df8f5d9181900360200190a3505050505050565b6001600160a01b0316600090815260046020526040902054606081901b91600160a01b90910460ff1690565b6000806000612d708585612e81565b604080516001600160601b0319606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60008183612e6b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506000838581612e7757fe5b0495945050505050565b600080826001600160a01b0316846001600160a01b03161415612ed55760405162461bcd60e51b81526004018080602001828103825260258152602001806130556025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610612ef5578284612ef8565b83835b90925090506001600160a01b038216612f58576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612fa057805160ff1916838001178555612fcd565b82800160010185558215612fcd579182015b82811115612fcd578251825591602001919060010190612fb2565b50612fd9929150612ff4565b5090565b604080518082019091526000808252602082015290565b610b5291905b80821115612fd95760008155600101612ffa56fe436f6e74726163742068617320657870697265640000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373556e697377617056324c6962726172793a204944454e544943414c5f41444452455353455353656c6c65722068617320696e73756666696369656e74206f626c69676174696f6e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e6e6f7420657865726369736520776974686f757420616e20616d6f756e74a2646970667358221220a115e252d5059acddd8662a7467f5ee6ef45cd75036abdfa0fb2d830b6a2a68364736f6c63430006060033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102055760003560e01c80636e1853261161011a57806399bc0aea116100ad578063d52131dc1161007c578063d52131dc1461071b578063dd62ed3e14610776578063f2fde38b146107a4578063f9a1e8f9146107ca578063fbbf93a0146107f657610205565b806399bc0aea146105ad578063a8fe1d82146105b5578063a9059cbb146106e7578063c52987cf1461071357610205565b80638a14117a116100e95780638a14117a146105785780638da5cb5b1461058057806395d89b41146105885780639721f2901461059057610205565b80636e185326146104fd57806370a082311461051a578063715018a6146105405780638870aab41461054857610205565b80632681f7e41161019d5780633451c9231161016c5780633451c923146104935780633b1bebd1146104b957806341ffb72e146104c15780635e4a6792146104c957806361d027b3146104f557610205565b80632681f7e4146103e757806326dcf4da146103ef5780632fdf8fb114610449578063313ce5671461047557610205565b8063095ea7b3116101d9578063095ea7b31461033157806310098ad51461037157806318160ddd146103a957806323b872dd146103b157610205565b8062f714ce1461020a578063010035af146102385780630178f1b91461025c57806306fdde03146102b4575b600080fd5b6102366004803603604081101561022057600080fd5b50803590602001356001600160a01b031661083d565b005b610240610ae3565b604080516001600160a01b039092168252519081900360200190f35b610264610af2565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102a0578181015183820152602001610288565b505050509050019250505060405180910390f35b6102bc610b55565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102f65781810151838201526020016102de565b50505050905090810190601f1680156103235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61035d6004803603604081101561034757600080fd5b506001600160a01b038135169060200135610be3565b604080519115158252519081900360200190f35b6103976004803603602081101561038757600080fd5b50356001600160a01b0316610c70565b60408051918252519081900360200190f35b610397610ca3565b61035d600480360360608110156103c757600080fd5b506001600160a01b03813581169160208101359091169060400135610ca9565b610240610da5565b610236600480360361010081101561040657600080fd5b5060ff813516906020810135906040810135906060810135906001600160a01b03608082013581169160a081013582169160c082013581169160e0013516610db4565b6102366004803603604081101561045f57600080fd5b506001600160a01b038135169060200135611072565b61047d611164565b6040805160ff9092168252519081900360200190f35b610397600480360360208110156104a957600080fd5b50356001600160a01b031661116d565b610240611188565b61035d611197565b610236600480360360408110156104df57600080fd5b506001600160a01b0381351690602001356111b7565b6102406114c9565b6103976004803603602081101561051357600080fd5b50356114d8565b6103976004803603602081101561053057600080fd5b50356001600160a01b0316611502565b61023661151d565b6102366004803603604081101561055e57600080fd5b5080356001600160601b031916906020013560ff166115d1565b610397611657565b61024061165d565b6102bc61166c565b610397600480360360208110156105a657600080fd5b50356116c7565b6103976116e6565b610236600480360360e08110156105cb57600080fd5b81359163ffffffff6020820135169160408201359160608101359181019060a08101608082013564010000000081111561060457600080fd5b82018360208201111561061657600080fd5b8035906020019184600183028401116401000000008311171561063857600080fd5b91939092909160208101903564010000000081111561065657600080fd5b82018360208201111561066857600080fd5b8035906020019184600183028401116401000000008311171561068a57600080fd5b9193909290916020810190356401000000008111156106a857600080fd5b8201836020820111156106ba57600080fd5b803590602001918460018302840111640100000000831117156106dc57600080fd5b5090925090506116ec565b61035d600480360360408110156106fd57600080fd5b506001600160a01b038135169060200135611a11565b610397611a94565b6107416004803603602081101561073157600080fd5b50356001600160a01b0316611a9a565b6040516001600160601b0319831681526020810182600281111561076157fe5b60ff1681526020019250505060405180910390f35b6103976004803603604081101561078c57600080fd5b506001600160a01b0381358116916020013516611aaf565b610236600480360360208110156107ba57600080fd5b50356001600160a01b0316611ada565b610236600480360360408110156107e057600080fd5b506001600160a01b038135169060200135611be5565b6107fe611d77565b6040805196875260208701959095528585019390935260608501919091526001600160a01b0390811660808501521660a0830152519081900360c00190f35b60005442111560405180604001604052806014815260200160008051602061300f833981519152815250906108f05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156108b557818101518382015260200161089d565b50505050905090810190601f1680156108e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506001600160a01b03811660009081526014602090815260408083203380855290835292819020548151808301909252601982527f496e73756666696369656e7420706f6f6c2062616c616e6365000000000000009282019290925261095f908290869063ffffffff611e2b16565b6001600160a01b038085166000818152601460209081526040808320948816835293815283822094909455908152601083528181205460139093529081205490916109b0919063ffffffff611e8516565b90506109fc856040518060400160405280601681526020017f496e73756666696369656e7420617661696c61626c650000000000000000000081525083611e2b9092919063ffffffff16565b6001600160a01b038516600090815260136020526040902055610a1f8386611ece565b600b5460408051638bfb07c960e01b81526001600160a01b038681166004830181905260248301526044820189905291519190921691638bfb07c991606480830192600092919082900301818387803b158015610a7b57600080fd5b505af1158015610a8f573d6000803e3d6000fd5b5050604080516001600160a01b038881168252602082018a9052825190881694507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb93509081900390910190a25050505050565b6009546001600160a01b031681565b60606003805480602002602001604051908101604052809291908181526020018280548015610b4a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b2c575b505050505090505b90565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b820191906000526020600020905b815481529060010190602001808311610bbe57829003601f168201915b505050505081565b6000805442111560405180604001604052806014815260200160008051602061300f83398151915281525090610c5a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50610c66338484611f9c565b5060015b92915050565b6001600160a01b0381166000908152600f60209081526040808320546011909252822054610c6a9163ffffffff611e8516565b60125481565b6000805442111560405180604001604052806014815260200160008051602061300f83398151915281525090610d205760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50610d2c848484612112565b6040805180820182526016815275416d6f756e7420657863656564732062616c616e636560501b6020808301919091526001600160a01b0387166000908152601582528381203380835292529290922054610d9b9287929091610d9691879063ffffffff611e2b16565b611f9c565b5060019392505050565b600c546001600160a01b031681565b610dbc61273a565b6002546001600160a01b03908116911614610e1e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b86864282116040518060400160405280601381526020017210d85b9b9bdd081a5b9a5d08195e1c1a5c9959606a1b81525090610e9b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060408051808201909152601581527f57696e646f772063616e6e6f74206265207a65726f0000000000000000000000602082015281610f1c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506000829055600181905560408051808201909152601e81527f5265717569726573206e6f6e2d7a65726f20737472696b652070726963650000602082015287610fa75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060408051808201909152600a8082526927b13634b3b0ba34b7b760b11b6020909201918252610fd991600591612f5f565b506040805180820190915260038082526213d09360ea1b602090920191825261100491600691612f5f565b50506007805460ff191660ff9a909a1699909917909855600894909455600980546001600160a01b03199081166001600160a01b0395861617909155600a8054821693851693909317909255600b80548316918416919091179055600c805490911691909216179055505050565b60005442111560405180604001604052806014815260200160008051602061300f833981519152815250906110e85760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506110f3828261273e565b60095460408051632fdf8fb160e01b81526001600160a01b0385811660048301526024820185905291519190921691632fdf8fb191604480830192600092919082900301818387803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050505050565b60075460ff1681565b6001600160a01b031660009081526011602052604090205490565b600a546001600160a01b031681565b60006111b06001546000546128ee90919063ffffffff16565b4211905090565b60005442116040518060400160405280601481526020017310dbdb9d1c9858dd081b9bdd08195e1c1a5c995960621b815250906112355760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060015460005461124b9163ffffffff6128ee16565b42111560405180604001604052806014815260200160008051602061300f833981519152815250906112be5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b503360006112cb836114d8565b6001600160a01b0385166000908152600f60205260409020549091506112f7908263ffffffff6128ee16565b6001600160a01b0385166000908152600f60208181526040808420859055601182529283902054918152825160608101909352602380845291909311159261307a90830139906113885760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50600d54604080513060601b60208083019190915260348083018590528351808403909101815260549092019092528051910120906113ce90600163ffffffff6128ee16565b600d556000818152600e60209081526040918290208481556001810180546001600160a01b03199081166001600160a01b0389811691821790935560029093018054909116918a16918217905583518581529283018690528351909391927f307a917ef57cbae93b7652ce4ba45aa7bb756907adb4508280e5cc0bca6a3d5692908290030190a360095460408051632f2533c960e11b81526001600160a01b0386811660048301526024820186905291519190921691635e4a679291604480830192600092919082900301818387803b1580156114aa57600080fd5b505af11580156114be573d6000803e3d6000fd5b505050505050505050565b600b546001600160a01b031681565b6000610c6a600a800a6114f66008548561294890919063ffffffff16565b9063ffffffff6129a116565b6001600160a01b031660009081526010602052604090205490565b61152561273a565b6002546001600160a01b03908116911614611587576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b60005442111560405180604001604052806014815260200160008051602061300f833981519152815250906116475760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506116533383836129e3565b5050565b60015481565b6002546001600160a01b031690565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610bdb5780601f10610bb057610100808354040283529160200191610bdb565b600854600090610c6a906114f6846402540be40063ffffffff61294816565b60005481565b60005442116040518060400160405280601481526020017310dbdb9d1c9858dd081b9bdd08195e1c1a5c995960621b8152509061176a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506001546000546117809163ffffffff6128ee16565b42111560405180604001604052806014815260200160008051602061300f833981519152815250906117f35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060008a8152600e60205260409020600201546001600160a01b0316611817612fdd565b6001600160a01b03821660009081526004602090815260409182902082518084019093528054606081901b6001600160601b03191684529091830190600160a01b900460ff16600281111561186857fe5b600281111561187357fe5b8152505090506000600a60009054906101000a90046001600160a01b03166001600160a01b031663eef421ab8e8e8e8e8e8e8e8e8e8e8d600001518e602001516040518d63ffffffff1660e01b8152600401808d81526020018c63ffffffff1663ffffffff1681526020018b81526020018a8152602001806020018060200180602001866bffffffffffffffffffffffff19166bffffffffffffffffffffffff1916815260200185600281111561192657fe5b60ff16815260200184810384528c8c82818152602001925080828437600083820152601f01601f191690910185810384528a815260200190508a8a80828437600083820152601f01601f191690910185810383528881526020019050888880828437600081840152601f19601f8201169050808301925050509f50505050505050505050505050505050602060405180830381600087803b1580156119ca57600080fd5b505af11580156119de573d6000803e3d6000fd5b505050506040513d60208110156119f457600080fd5b50519050611a028d82612ac0565b50505050505050505050505050565b6000805442111560405180604001604052806014815260200160008051602061300f83398151915281525090611a885760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50610c66338484612112565b60085481565b600080611aa683612d35565b91509150915091565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b611ae261273a565b6002546001600160a01b03908116911614611b44576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116611b895760405162461bcd60e51b815260040180806020018281038252602681526020018061302f6026913960400191505060405180910390fd5b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b60005442111560405180604001604052806014815260200160008051602061300f83398151915281525090611c5b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b50611c66828261273e565b600b546040805163d8dfeb4560e01b815290516000926001600160a01b03169163d8dfeb45916004808301926020929190829003018186803b158015611cab57600080fd5b505afa158015611cbf573d6000803e3d6000fd5b505050506040513d6020811015611cd557600080fd5b5051600c54600954919250600091611cfa916001600160a01b03908116911684612d61565b60095460408051638f033bd960e01b81526001600160a01b0388811660048301528085166024830152604482018890529151939450911691638f033bd99160648082019260009290919082900301818387803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b5050505050505050565b6000806000806000806000600b60009054906101000a90046001600160a01b03166001600160a01b031663d8dfeb456040518163ffffffff1660e01b815260040160206040518083038186803b158015611dd057600080fd5b505afa158015611de4573d6000803e3d6000fd5b505050506040513d6020811015611dfa57600080fd5b5051600054600154600854600754600954939c929b5090995060ff1697509195506001600160a01b03169350915050565b60008184841115611e7d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b505050900390565b6000611ec783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e2b565b9392505050565b6040805180820182526016815275416d6f756e7420657863656564732062616c616e636560501b6020808301919091526001600160a01b038516600090815260119091529190912054611f2891839063ffffffff611e2b16565b6001600160a01b038316600090815260116020526040902055601254611f54908263ffffffff611e8516565b6012556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60408051808201909152601981527f417070726f76652066726f6d207a65726f20616464726573730000000000000060208201526001600160a01b0384166120255760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060408051808201909152601781527f417070726f766520746f207a65726f206164647265737300000000000000000060208201526001600160a01b0383166120af5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506001600160a01b03808416600081815260156020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60408051808201909152601a81527f5472616e736665722066726f6d207a65726f206164647265737300000000000060208201526001600160a01b03841661219b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b5060408051808201909152601881527f5472616e7366657220746f207a65726f2061646472657373000000000000000060208201526001600160a01b0383166122255760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506040805180820182526016815275416d6f756e7420657863656564732062616c616e636560501b6020808301919091526001600160a01b03861660009081526010909152919091205461228091839063ffffffff611e2b16565b6001600160a01b0380851660009081526010602052604080822093909355908416815220546122b5908263ffffffff6128ee16565b6001600160a01b0383811660009081526010602090815260408083209490945591861681526004909152205460601b6001600160601b0319161580159061232057506001600160a01b03821660009081526004602052604090205460601b6001600160601b03191615155b156124d757600b546040805163282d3fdf60e01b81526001600160a01b03858116600483015260248201859052825193169263282d3fdf926044808401939192918290030181600087803b15801561237757600080fd5b505af115801561238b573d6000803e3d6000fd5b505050506040513d60408110156123a157600080fd5b5050600b5460408051638bfb07c960e01b81526001600160a01b038681166004830181905260248301526044820185905291519190921691638bfb07c991606480830192600092919082900301818387803b1580156123ff57600080fd5b505af1158015612413573d6000803e3d6000fd5b5050506001600160a01b03841660009081526011602052604090205461244091508263ffffffff611e8516565b6001600160a01b038085166000908152601160205260408082209390935590841681522054612475908263ffffffff6128ee16565b6001600160a01b0383166000818152601160205260408120929092556003805460018101825592527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b03191690911790556126ea565b6001600160a01b03831660009081526004602052604090205460601b6001600160601b0319161580159061252e57506001600160a01b03821660009081526004602052604090205460601b6001600160601b031916155b156125c9576001600160a01b03821660009081526013602052604090205461255c908263ffffffff6128ee16565b6001600160a01b0380841660009081526013602090815260408083209490945560148152838220928716825291909152205461259e908263ffffffff6128ee16565b6001600160a01b038084166000908152601460209081526040808320938816835292905220556126ea565b600b546040805163282d3fdf60e01b81526001600160a01b038581166004830152602482018590528251600094859492169263282d3fdf92604480830193919282900301818787803b15801561261e57600080fd5b505af1158015612632573d6000803e3d6000fd5b505050506040513d604081101561264857600080fd5b50805160209091015190925090506126618483836129e3565b6001600160a01b03841660009081526011602052604090205461268a908463ffffffff6128ee16565b6001600160a01b0385166000818152601160205260408120929092556003805460018101825592527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b031916909117905550505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3390565b6001600160a01b038216600090815260106020526040902054612767908263ffffffff6128ee16565b6001600160a01b03831660009081526010602090815260408083209390935560119052205461279c908263ffffffff6128ee16565b6001600160a01b0383166000908152601160205260409020556012546127c8908263ffffffff6128ee16565b6012556003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03858116918217909255600b546040805163282d3fdf60e01b815260048101939093526024830186905280518594929092169263282d3fdf926044808301939282900301818787803b15801561286457600080fd5b505af1158015612878573d6000803e3d6000fd5b505050506040513d604081101561288e57600080fd5b50805160209091015190925090506128a78483836129e3565b6040805184815290516001600160a01b038616916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350505050565b600082820183811015611ec7576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261295757506000610c6a565b8282028284828161296457fe5b0414611ec75760405162461bcd60e51b815260040180806020018281038252602181526020018061309d6021913960400191505060405180910390fd5b6000611ec783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e1c565b60408051808201909152601c81527f43616e6e6f742073657420656d7074792042544320616464726573730000000060208201526001600160601b03198316612a6d5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506001600160a01b038316600090815260046020526040902080546001600160a01b031916606084901c1780825582919060ff60a01b1916600160a01b836002811115612ab657fe5b0217905550505050565b6000600e6000848152602001908152602001600020600001549050600081116040518060600160405280602181526020016130be6021913990612b445760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506000612b50836114d8565b90508082146040518060400160405280601581526020017f496e76616c6964206f757470757420616d6f756e74000000000000000000000081525090612bd75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506000848152600e6020908152604080832060018101546002909101546001600160a01b03908116808652600f9094529190932054921691612c1f908563ffffffff611e8516565b6001600160a01b0382166000908152600f6020908152604080832093909355888252600e90529081209081556001810180546001600160a01b0319908116909155600290910180549091169055612c768185611ece565b600b5460408051638bfb07c960e01b81526001600160a01b03848116600483015285811660248301526044820188905291519190921691638bfb07c991606480830192600092919082900301818387803b158015612cd357600080fd5b505af1158015612ce7573d6000803e3d6000fd5b50506040805187815290516001600160a01b038086169450861692507f525a3f1fcdea62b71309cb54f24087a33523bfd0055b0f04651922f002df8f5d9181900360200190a3505050505050565b6001600160a01b0316600090815260046020526040902054606081901b91600160a01b90910460ff1690565b6000806000612d708585612e81565b604080516001600160601b0319606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b60008183612e6b5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156108b557818101518382015260200161089d565b506000838581612e7757fe5b0495945050505050565b600080826001600160a01b0316846001600160a01b03161415612ed55760405162461bcd60e51b81526004018080602001828103825260258152602001806130556025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610612ef5578284612ef8565b83835b90925090506001600160a01b038216612f58576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612fa057805160ff1916838001178555612fcd565b82800160010185558215612fcd579182015b82811115612fcd578251825591602001919060010190612fb2565b50612fd9929150612ff4565b5090565b604080518082019091526000808252602082015290565b610b5291905b80821115612fd95760008155600101612ffa56fe436f6e74726163742068617320657870697265640000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373556e697377617056324c6962726172793a204944454e544943414c5f41444452455353455353656c6c65722068617320696e73756666696369656e74206f626c69676174696f6e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e6e6f7420657865726369736520776974686f757420616e20616d6f756e74a2646970667358221220a115e252d5059acddd8662a7467f5ee6ef45cd75036abdfa0fb2d830b6a2a68364736f6c63430006060033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
