{
  "_format": "hh-sol-artifact-1",
  "contractName": "PoolTokenAllocation",
  "sourceName": "contracts/V3/PoolTokenAllocation.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "logo",
              "type": "string"
            }
          ],
          "internalType": "struct TokenInfo",
          "name": "tokenInfo",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "add",
          "type": "bool"
        }
      ],
      "name": "addTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "allTokens",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "erc",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "logo",
              "type": "string"
            }
          ],
          "internalType": "struct TokenInfo[]",
          "name": "tokenInfos",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint16",
              "name": "allocationId",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "allocationType",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "optType",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct IdAmount[]",
              "name": "ids",
              "type": "tuple[]"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct AllocationParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "allocate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "allocationId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "allocationType",
          "type": "uint8"
        }
      ],
      "name": "allocationKey",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "allocationType",
          "type": "uint8"
        }
      ],
      "name": "getAllocation",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "id",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "typ",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "increasedSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "burned",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "released",
              "type": "uint256"
            }
          ],
          "internalType": "struct AmountAllocation[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "allocationType",
          "type": "uint8"
        }
      ],
      "name": "getIdAllocation",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint8",
              "name": "typ",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            },
            {
              "internalType": "uint256[]",
              "name": "ids",
              "type": "uint256[]"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct IdAmount[]",
              "name": "initialIds",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct IdAmount[]",
              "name": "increasedIds",
              "type": "tuple[]"
            },
            {
              "internalType": "uint256[]",
              "name": "burnedIds",
              "type": "uint256[]"
            },
            {
              "internalType": "uint256[]",
              "name": "releasedIds",
              "type": "uint256[]"
            }
          ],
          "internalType": "struct IdAllocationView[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint16",
              "name": "allocationId",
              "type": "uint16"
            },
            {
              "internalType": "uint8",
              "name": "allocationType",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "optType",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amount",
                  "type": "uint256"
                }
              ],
              "internalType": "struct IdAmount[]",
              "name": "ids",
              "type": "tuple[]"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct AllocationParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "idAllocate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "a",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "b",
          "type": "string"
        }
      ],
      "name": "isEqual",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "allocationId",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "recordInput",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "erc",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "allocationType",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "burn",
          "type": "bool"
        },
        {
          "internalType": "uint16",
          "name": "allocationId",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "spendAllocation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "tokens",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "erc",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "logo",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50613676806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a45760003560e01c8063112b865f146100a95780632115422b146100be578063366780c7146100d1578063465c4105146100fa5780634fd5ea2a1461011d5780635339ca4d1461013057806357aaa8ae146101515780636ff97f1d146101645780639b67b0d014610179578063a6831a1314610199578063c4d66de8146101ac578063e4860339146101bf575b600080fd5b6100bc6100b7366004612ac9565b6101e1565b005b6100bc6100cc366004612c2c565b610414565b6100e46100df366004612ce2565b610558565b6040516100f19190612dda565b60405180910390f35b61010d610108366004612f04565b610841565b60405190151581526020016100f1565b6100bc61012b366004612fff565b61089a565b61014361013e366004613110565b610c50565b6040519081526020016100f1565b6100bc61015f366004613156565b610cbe565b61016c610ebd565b6040516100f191906131ce565b61018c61018736600461324b565b61105b565b6040516100f19190613287565b6100bc6101a7366004612fff565b611656565b6100bc6101ba366004613352565b61197d565b6101d26101cd366004613352565b611aa8565b6040516100f19392919061336d565b6000546201000090046001600160a01b0316331461021a5760405162461bcd60e51b81526004016102119061339a565b60405180910390fd5b610225600185611b61565b6102415760405162461bcd60e51b8152600401610211906133bd565b6001600160a01b0380851660009081526003602090815260408083208151606081018352815460ff8116825261010090049095169285019290925260018201805493949391840191610292906133e2565b80601f01602080910402602001604051908101604052809291908181526020018280546102be906133e2565b801561030b5780601f106102e05761010080835404028352916020019161030b565b820191906000526020600020905b8154815290600101906020018083116102ee57829003601f168201915b5050505050815250509050806000015160ff16600260ff161415610399576001600160a01b0385166000908152600460209081526040808320838052909152902061035a9061ffff8616611b76565b506000600660006103738860008961ffff166001610c50565b8152602081019190915260400160002090506103926003820185611b76565b505061040d565b6001600160a01b038516600090815260046020908152604080832086845290915290206103ca9061ffff8616611b76565b506000600560006103e288878961ffff166001610c50565b81526020019081526020016000209050828160030160008282546104069190613433565b9091555050505b5050505050565b6000546201000090046001600160a01b031633146104445760405162461bcd60e51b81526004016102119061339a565b8151600360ff909116111561048c5760405162461bcd60e51b815260206004820152600e60248201526d6572726f7220657263207479706560901b6044820152606401610211565b80156105065760208201516104a390600190611b82565b50602080830180516001600160a01b03908116600090815260038452604090819020865181549451909316610100026001600160a81b031990941660ff90931692909217929092178155908401518051859361040d926001850192910190612935565b602082015161051790600190611b97565b506020808301516001600160a01b0316600090815260039091526040812080546001600160a81b03191681559061055160018301826129b5565b50505b5050565b6060610565600184611b61565b6105815760405162461bcd60e51b8152600401610211906133bd565b6001600160a01b0380841660009081526003602090815260408083208151606081018352815460ff81168252610100900490951692850192909252600182018054939493918401916105d2906133e2565b80601f01602080910402602001604051908101604052809291908181526020018280546105fe906133e2565b801561064b5780601f106106205761010080835404028352916020019161064b565b820191906000526020600020905b81548152906001019060200180831161062e57829003601f168201915b50505091909252505081519192505060ff1660021461067c5760405162461bcd60e51b8152600401610211906133bd565b6001600160a01b03841660009081526004602090815260408083208380529091528120906106a982611bac565b90506106b6826000611bb6565b6106c8576106c5600182613433565b90505b6000816001600160401b038111156106e2576106e2612b0b565b60405190808252806020026020018201604052801561076557816020015b61075260405180610120016040528060008152602001600060ff168152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816107005790505b50905060005b61077484611bac565b8110156107df5760006006816107998b8261078f8a88611bc2565b61ffff168d610c50565b815260200190815260200160002090506107cc8383815181106107be576107be61344b565b602002602001015182611bce565b50806107d781613461565b91505061076b565b506107eb836000611bb6565b610835576000600660006108028a6000808c610c50565b8152602001908152602001600020905061083382600185610823919061347c565b815181106107be576107be61344b565b505b93505050505b92915050565b6000816040516020016108549190613493565b604051602081830303815290604052805190602001208360405160200161087b9190613493565b6040516020818303038152906040528051906020012014905092915050565b6000546201000090046001600160a01b031633146108ca5760405162461bcd60e51b81526004016102119061339a565b60008160c00151511161090b5760405162461bcd60e51b8152602060048201526009602482015268656d7074792069647360b81b6044820152606401610211565b60005b8160c00151518110156109955760008260c0015182815181106109335761093361344b565b602002602001015160000151116109835760405162461bcd60e51b815260206004820152601460248201527306964206d757374206772656174207468616e20360641b6044820152606401610211565b8061098d81613461565b91505061090e565b5060006109a182611e2c565b805190915060ff166002146109c85760405162461bcd60e51b8152600401610211906133bd565b81516020808401516040808601516060870151608088015160c08901516001600160a01b0388166000908152600488528581208180529097529390952093949193909290610a1a9061ffff8616611b76565b50600060066000610a328960008961ffff1689610c50565b81526020019081526020016000209050610a4c818a612066565b60ff8316610b9c5760ff841660011415610a88576003810160008181610a7282826129f2565b50505050610a83816003018361224d565b610c45565b600781015415610b50576007810154600090610aa69060019061347c565b90505b8015610b41576000826007018281548110610ac657610ac661344b565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509050610b0f8160000151846003016122cb90919063ffffffff16565b50602081015115610b2e57805160009081526006840160205260408120555b5080610b39816134af565b915050610aa9565b50610b50600782016000612a10565b610b5e8182600701846122d7565b610b6c6005820160006129f2565b610b80610b7b82600301612372565b61237f565b8051610b96916005840191602090910190612a31565b50610c45565b60ff831660011415610bb657610b5e8182600801846122d7565b60ff831660021415610bcf57610a83816009018361224d565b60ff831660031415610bfe57600b810160008181610bed82826129f2565b50505050610a8381600b018361224d565b60ff831660041415610c2d576009810160008181610c1c82826129f2565b50505050610a83816009018361224d565b60405162461bcd60e51b8152600401610211906134c6565b505050505050505050565b6040516001600160601b0319606086901b16602082015260348101849052605481018390526001600160f81b031960f883901b1660748201526000906001906075016040516020818303038152906040528051906020012060001c610cb5919061347c565b95945050505050565b6000546201000090046001600160a01b03163314610cee5760405162461bcd60e51b81526004016102119061339a565b60ff861660021415610dca57600060066000610d118a60008861ffff168b610c50565b8152602001908152602001600020905060008461ffff161115610d9c5760ff861660011415610d7657610d476003820184611bb6565b610d635760405162461bcd60e51b8152600401610211906134f4565b610d7060038201846122cb565b50610d9c565b610d80818461239a565b610d9c5760405162461bcd60e51b8152600401610211906134f4565b8415610db557610daf6009820184611b76565b50610dc4565b610dc2600b820184611b76565b505b50610eb4565b60ff8616600314610dda57600091505b600060056000610df08a868861ffff168b610c50565b8152602001908152602001600020905060008461ffff161115610e73578060030154821115610e595760405162461bcd60e51b8152602060048201526015602482015274185b5bdd5b9d08195e18d9595908185b1b1bddd959605a1b6044820152606401610211565b81816003016000828254610e6d919061347c565b90915550505b8415610e985781816006016000828254610e8d9190613433565b90915550610eb29050565b81816007016000828254610eac9190613433565b90915550505b505b50505050505050565b6060610ec96001611bac565b6001600160401b03811115610ee057610ee0612b0b565b604051908082528060200260200182016040528015610f2d57816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081610efe5790505b50905060005b610f3d6001611bac565b8110156110575760036000610f53600184611bc2565b6001600160a01b03908116825260208083019390935260409182016000208251606081018452815460ff81168252610100900490921693820193909352600183018054919392840191610fa5906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd1906133e2565b801561101e5780601f10610ff35761010080835404028352916020019161101e565b820191906000526020600020905b81548152906001019060200180831161100157829003601f168201915b5050505050815250508282815181106110395761103961344b565b6020026020010181905250808061104f90613461565b915050610f33565b5090565b6060611068600185611b61565b6110845760405162461bcd60e51b8152600401610211906133bd565b6001600160a01b0380851660009081526003602090815260408083208151606081018352815460ff81168252610100900490951692850192909252600182018054939493918401916110d5906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611101906133e2565b801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b50505091909252505081519192505060ff16600214156111805760405162461bcd60e51b8152600401610211906133bd565b805160ff1660031461119157600093505b6001600160a01b03851660009081526004602090815260408083208784529091528120906111be82611bac565b90506111cb826000611bb6565b6111dd576111da600182613433565b90505b6000816001600160401b038111156111f7576111f7612b0b565b60405190808252806020026020018201604052801561127e57816020015b61126b604051806101200160405280600061ffff168152602001600060ff168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816112155790505b50905060005b61128d84611bac565b81101561147057600560006112b18b8b6112a78987611bc2565b61ffff168c610c50565b81526020808201929092526040908101600020815161012081018352815461ffff8116825262010000900460ff169381019390935260018101805491928401916112fa906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611326906133e2565b80156113735780601f1061134857610100808354040283529160200191611373565b820191906000526020600020905b81548152906001019060200180831161135657829003601f168201915b5050505050815260200160028201805461138c906133e2565b80601f01602080910402602001604051908101604052809291908181526020018280546113b8906133e2565b80156114055780601f106113da57610100808354040283529160200191611405565b820191906000526020600020905b8154815290600101906020018083116113e857829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250508282815181106114525761145261344b565b6020026020010181905250808061146890613461565b915050611284565b5061147c836000611bb6565b61164957600560006114918a8a60008b610c50565b81526020808201929092526040908101600020815161012081018352815461ffff8116825262010000900460ff169381019390935260018101805491928401916114da906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611506906133e2565b80156115535780601f1061152857610100808354040283529160200191611553565b820191906000526020600020905b81548152906001019060200180831161153657829003601f168201915b5050505050815260200160028201805461156c906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611598906133e2565b80156115e55780601f106115ba576101008083540402835291602001916115e5565b820191906000526020600020905b8154815290600101906020018083116115c857829003601f168201915b50505091835250506003820154602082015260048201546040820152600582015460608201526006820154608082015260079091015460a0909101528161162d60018561347c565b8151811061163d5761163d61344b565b60200260200101819052505b93505050505b9392505050565b6000546201000090046001600160a01b031633146116865760405162461bcd60e51b81526004016102119061339a565b60008160a00151116116d55760405162461bcd60e51b81526020600482015260186024820152770616d6f756e74206d757374206772656174207468616e20360441b6044820152606401610211565b60006116e082611e2c565b805190915060ff16600214156117085760405162461bcd60e51b8152600401610211906133bd565b8151602083015160408401516060850151608086015160a0870151865160ff1660031461173457600094505b6001600160a01b038616600090815260046020908152604080832088845290915290206117659061ffff8616611b76565b5060006005600061177c89898961ffff1689610c50565b81526020019081526020016000209050611796818a612066565b60ff83166118695760ff8416600114156117b65760038101829055610c45565b806007015481600601546117ca9190613433565b60058201546117d99084613433565b1161184c5760405162461bcd60e51b815260206004820152603f60248201527f6572726f7220616c6c6f636174696f6e2c20616d6f756e742b696e637265617360448201527f6564537570706c79206d757374203e206275726e65642b72656c6561736564006064820152608401610211565b600481018054600383018054918590039091039055829055610c45565b60ff8316600114156118af57818160050160008282546118899190613433565b92505081905550818160030160008282546118a49190613433565b90915550610c459050565b60ff83166002141561194d578060030154821061191e5760405162461bcd60e51b815260206004820152602760248201527f6572726f7220616c6c6f636174696f6e2c20616d6f756e74206d757374203c2060448201526662616c616e636560c81b6064820152608401610211565b818160060160008282546119329190613433565b92505081905550818160030160008282546118a4919061347c565b60ff8316600314156119655760078101829055610c45565b60ff831660041415610c2d5760068101829055610c45565b600054610100900460ff161580801561199d5750600054600160ff909116105b806119b75750303b1580156119b7575060005460ff166001145b611a1a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610211565b6000805460ff191660011790558015611a3d576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610554576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6003602052600090815260409020805460018201805460ff8316936101009093046001600160a01b0316929190611ade906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0a906133e2565b8015611b575780601f10611b2c57610100808354040283529160200191611b57565b820191906000526020600020905b815481529060010190602001808311611b3a57829003601f168201915b5050505050905083565b600061164f836001600160a01b038416612500565b600061164f8383612518565b600061164f836001600160a01b038416612518565b600061164f836001600160a01b038416612562565b600061083b825490565b600061164f8383612500565b600061164f8383612655565b805461ffff8116835262010000900460ff166020830152600181018054611bf4906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c20906133e2565b8015611c6d5780601f10611c4257610100808354040283529160200191611c6d565b820191906000526020600020905b815481529060010190602001808311611c5057829003601f168201915b50505050508260400181905250806002018054611c89906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb5906133e2565b8015611d025780601f10611cd757610100808354040283529160200191611d02565b820191906000526020600020905b815481529060010190602001808311611ce557829003601f168201915b50505050508260600181905250611d1b81600301612372565b60808301526007810180546040805160208084028201810190925282815292919060009084015b82821015611d8857838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611d42565b5050505060a08301526008810180546040805160208084028201810190925282815292919060009084015b82821015611df957838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611db3565b5050505060c0830152611e0e60098201612372565b60e0830152611e1f600b8201612372565b8261010001819052505050565b604080516060808201835260008083526020830152918101919091528151611e5690600190611b61565b611e725760405162461bcd60e51b8152600401610211906133bd565b6000826040015161ffff1611611ec15760405162461bcd60e51b81526020600482015260146024820152730616c6c6f636174696f6e4964206d757374203e360641b6044820152606401610211565b600160ff16826060015160ff161115611f145760405162461bcd60e51b81526020600482015260156024820152746572726f7220616c6c6f636174696f6e207479706560581b6044820152606401610211565b600460ff16826080015160ff161115611f3f5760405162461bcd60e51b8152600401610211906134c6565b606082015160ff1660011415611f8b57608082015160ff16600114801590611f6f5750608082015160ff16600214155b611f8b5760405162461bcd60e51b8152600401610211906134c6565b81516001600160a01b039081166000908152600360209081526040918290208251606081018452815460ff811682526101009004909416918401919091526001810180549192840191611fdd906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054612009906133e2565b80156120565780601f1061202b57610100808354040283529160200191612056565b820191906000526020600020905b81548152906001019060200180831161203957829003601f168201915b5050505050815250509050919050565b6040810151825461ffff908116911614612090576040810151825461ffff191661ffff9091161782555b6060810151825462010000900460ff9081169116146120c6576060810151825460ff909116620100000262ff0000199091161782555b608081015160ff166105545761216c8260010180546120e4906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054612110906133e2565b801561215d5780601f106121325761010080835404028352916020019161215d565b820191906000526020600020905b81548152906001019060200180831161214057829003601f168201915b50505050508260e00151610841565b61218d5760e0810151805161218b916001850191602090910190612935565b505b61222882600201805461219f906133e2565b80601f01602080910402602001604051908101604052809291908181526020018280546121cb906133e2565b80156122185780601f106121ed57610100808354040283529160200191612218565b820191906000526020600020905b8154815290600101906020018083116121fb57829003601f168201915b5050505050826101000151610841565b610554576101008101518051612248916002850191602090910190612935565b505050565b60005b815181101561224857600082828151811061226d5761226d61344b565b6020026020010151905060005b816020015181116122b6578151600090612295908390613433565b90506122a18682611b76565b505080806122ae90613461565b91505061227a565b505080806122c390613461565b915050612250565b600061164f8383612562565b60005b81518110156105515760008282815181106122f7576122f761344b565b60209081029190910181015185546001818101885560008881528490208351600290930201828155938301519301929092559150612339906003870190611b76565b5060208101511561235f5760208082015182516000908152600688019092526040909120555b508061236a81613461565b9150506122da565b6060600061164f8361267f565b606061105782600060018551612395919061347c565b6126db565b60058201546000906123ae5750600061083b565b6123bb600b840183611bb6565b156123c85750600061083b565b6123d56009840183611bb6565b156123e25750600061083b565b6005830180546040805160208084028201810190925282815260009361244c939287929190849083018282801561243857602002820191906000526020600020905b815481526020019060010190808311612424575b505050505061285c9092919063ffffffff16565b6005850154909150811080156124805750828460050182815481106124735761247361344b565b9060005260206000200154145b1561248f57600191505061083b565b80156124f6576000600585016124a660018461347c565b815481106124b6576124b661344b565b6000918252602080832090910154808352600688019091526040909120549091506124e18183613433565b85116124f3576001935050505061083b565b50505b5060009392505050565b60009081526001919091016020526040902054151590565b60006125248383612500565b61255a5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561083b565b50600061083b565b6000818152600183016020526040812054801561264b57600061258660018361347c565b855490915060009061259a9060019061347c565b90508181146125ff5760008660000182815481106125ba576125ba61344b565b90600052602060002001549050808760000184815481106125dd576125dd61344b565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061261057612610613523565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061083b565b600091505061083b565b600082600001828154811061266c5761266c61344b565b9060005260206000200154905092915050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156126cf57602002820191906000526020600020905b8154815260200190600101908083116126bb575b50505050509050919050565b8181808214156126ec575050505050565b60008560026126fb8787613539565b612705919061358e565b61270f90876135bc565b8151811061271f5761271f61344b565b602002602001015190505b81831361282e575b808684815181106127455761274561344b565b60200260200101511015612765578261275d816135fd565b935050612732565b8582815181106127775761277761344b565b6020026020010151811015612798578161279081613616565b925050612765565b818313612829578582815181106127b1576127b161344b565b60200260200101518684815181106127cb576127cb61344b565b60200260200101518785815181106127e5576127e561344b565b602002602001018885815181106127fe576127fe61344b565b60209081029190910101919091525282612817816135fd565b935050818061282590613616565b9250505b61272a565b81851215612841576128418686846126db565b83831215612854576128548684866126db565b505050505050565b60008351600014156128705750600061164f565b6000835b808210156128c7576000612888838361291a565b90508487828151811061289d5761289d61344b565b602002602001015111156128b3578091506128c1565b6128be816001613433565b92505b50612874565b6000821180156128f9575083866128df60018561347c565b815181106128ef576128ef61344b565b6020026020010151145b156129125761290960018361347c565b9250505061164f565b50905061164f565b6000612929600284841861362c565b61164f90848416613433565b828054612941906133e2565b90600052602060002090601f01602090048101928261296357600085556129a9565b82601f1061297c57805160ff19168380011785556129a9565b828001600101855582156129a9579182015b828111156129a957825182559160200191906001019061298e565b50611057929150612a6b565b5080546129c1906133e2565b6000825580601f106129d1575050565b601f0160209004906000526020600020908101906129ef9190612a6b565b50565b50805460008255906000526020600020908101906129ef9190612a6b565b50805460008255600202906000526020600020908101906129ef9190612a80565b8280548282559060005260206000209081019282156129a957916020028201828111156129a957825182559160200191906001019061298e565b5b808211156110575760008155600101612a6c565b5b808211156110575760008082556001820155600201612a81565b80356001600160a01b0381168114612ab257600080fd5b919050565b803561ffff81168114612ab257600080fd5b60008060008060808587031215612adf57600080fd5b612ae885612a9b565b9350612af660208601612ab7565b93969395505050506040820135916060013590565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612b4357612b43612b0b565b60405290565b60405161012081016001600160401b0381118282101715612b4357612b43612b0b565b604051601f8201601f191681016001600160401b0381118282101715612b9457612b94612b0b565b604052919050565b803560ff81168114612ab257600080fd5b600082601f830112612bbe57600080fd5b81356001600160401b03811115612bd757612bd7612b0b565b612bea601f8201601f1916602001612b6c565b818152846020838601011115612bff57600080fd5b816020850160208301376000918101602001919091529392505050565b80358015158114612ab257600080fd5b60008060408385031215612c3f57600080fd5b82356001600160401b0380821115612c5657600080fd5b9084019060608287031215612c6a57600080fd5b604051606081018181108382111715612c8557612c85612b0b565b604052612c9183612b9c565b8152612c9f60208401612a9b565b6020820152604083013582811115612cb657600080fd5b612cc288828601612bad565b6040830152509350612cd991505060208401612c1c565b90509250929050565b60008060408385031215612cf557600080fd5b612cfe83612a9b565b9150612cd960208401612b9c565b60005b83811015612d27578181015183820152602001612d0f565b838111156105515750506000910152565b60008151808452612d50816020860160208601612d0c565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015612d9457815187529582019590820190600101612d78565b509495945050505050565b600081518084526020808501945080840160005b83811015612d94578151805188528301518388015260409096019590820190600101612db3565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ef657603f198984030185528151805184528781015160ff16888501528681015161012088860181905290612e3d82870182612d38565b91505060608083015186830382880152612e578382612d38565b9250505060808083015186830382880152612e728382612d64565b9250505060a08083015186830382880152612e8d8382612d9f565b9250505060c08083015186830382880152612ea88382612d9f565b9250505060e08083015186830382880152612ec38382612d64565b925050506101008083015192508582038187015250612ee28183612d64565b968901969450505090860190600101612e01565b509098975050505050505050565b60008060408385031215612f1757600080fd5b82356001600160401b0380821115612f2e57600080fd5b612f3a86838701612bad565b93506020850135915080821115612f5057600080fd5b50612f5d85828601612bad565b9150509250929050565b600082601f830112612f7857600080fd5b813560206001600160401b03821115612f9357612f93612b0b565b612fa1818360051b01612b6c565b82815260069290921b84018101918181019086841115612fc057600080fd5b8286015b848110156108335760408189031215612fdd5760008081fd5b612fe5612b21565b813581528482013585820152835291830191604001612fc4565b60006020828403121561301157600080fd5b81356001600160401b038082111561302857600080fd5b90830190610120828603121561303d57600080fd5b613045612b49565b61304e83612a9b565b81526020830135602082015261306660408401612ab7565b604082015261307760608401612b9c565b606082015261308860808401612b9c565b608082015260a083013560a082015260c0830135828111156130a957600080fd5b6130b587828601612f67565b60c08301525060e0830135828111156130cd57600080fd5b6130d987828601612bad565b60e08301525061010080840135838111156130f357600080fd5b6130ff88828701612bad565b918301919091525095945050505050565b6000806000806080858703121561312657600080fd5b61312f85612a9b565b9350602085013592506040850135915061314b60608601612b9c565b905092959194509250565b600080600080600080600060e0888a03121561317157600080fd5b61317a88612a9b565b965061318860208901612b9c565b955061319660408901612b9c565b94506131a460608901612c1c565b93506131b260808901612ab7565b925060a0880135915060c0880135905092959891949750929550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ef657888303603f190185528151805160ff168452878101516001600160a01b031688850152860151606087850181905261323781860183612d38565b9689019694505050908601906001016131f5565b60008060006060848603121561326057600080fd5b61326984612a9b565b92506020840135915061327e60408501612b9c565b90509250925092565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ef657888303603f190185528151805161ffff1684526101208189015160ff8116868b0152508782015181898701526132ee82870182612d38565b915050606080830151868303828801526133088382612d38565b6080858101519089015260a0808601519089015260c0808601519089015260e0808601519089015261010094850151949097019390935250505093860193908601906001016132ae565b60006020828403121561336457600080fd5b61164f82612a9b565b60ff841681526001600160a01b0383166020820152606060408201819052600090610cb590830184612d38565b6020808252600990820152686f6e6c79506f6f6c2160b81b604082015260600190565b6020808252600b908201526a32b93937b9103a37b5b2b760a91b604082015260600190565b600181811c908216806133f657607f821691505b6020821081141561341757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156134465761344661341d565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156134755761347561341d565b5060010190565b60008282101561348e5761348e61341d565b500390565b600082516134a5818460208701612d0c565b9190910192915050565b6000816134be576134be61341d565b506000190190565b6020808252601490820152736572726f72206f7065726174696f6e207479706560601b604082015260600190565b602080825260159082015274746f6b656e4964206e6f7420617661696c61626c6560581b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b60008083128015600160ff1b8501841216156135575761355761341d565b6001600160ff1b03840183138116156135725761357261341d565b50500390565b634e487b7160e01b600052601260045260246000fd5b60008261359d5761359d613578565b600160ff1b8214600019841416156135b7576135b761341d565b500590565b600080821280156001600160ff1b03849003851316156135de576135de61341d565b600160ff1b83900384128116156135f7576135f761341d565b50500190565b60006001600160ff1b038214156134755761347561341d565b6000600160ff1b8214156134be576134be61341d565b60008261363b5761363b613578565b50049056fea2646970667358221220f1ba092051af4ee3d4369d35dbe29c7174563ad2495f7d11c30d83556bdeac6864736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a45760003560e01c8063112b865f146100a95780632115422b146100be578063366780c7146100d1578063465c4105146100fa5780634fd5ea2a1461011d5780635339ca4d1461013057806357aaa8ae146101515780636ff97f1d146101645780639b67b0d014610179578063a6831a1314610199578063c4d66de8146101ac578063e4860339146101bf575b600080fd5b6100bc6100b7366004612ac9565b6101e1565b005b6100bc6100cc366004612c2c565b610414565b6100e46100df366004612ce2565b610558565b6040516100f19190612dda565b60405180910390f35b61010d610108366004612f04565b610841565b60405190151581526020016100f1565b6100bc61012b366004612fff565b61089a565b61014361013e366004613110565b610c50565b6040519081526020016100f1565b6100bc61015f366004613156565b610cbe565b61016c610ebd565b6040516100f191906131ce565b61018c61018736600461324b565b61105b565b6040516100f19190613287565b6100bc6101a7366004612fff565b611656565b6100bc6101ba366004613352565b61197d565b6101d26101cd366004613352565b611aa8565b6040516100f19392919061336d565b6000546201000090046001600160a01b0316331461021a5760405162461bcd60e51b81526004016102119061339a565b60405180910390fd5b610225600185611b61565b6102415760405162461bcd60e51b8152600401610211906133bd565b6001600160a01b0380851660009081526003602090815260408083208151606081018352815460ff8116825261010090049095169285019290925260018201805493949391840191610292906133e2565b80601f01602080910402602001604051908101604052809291908181526020018280546102be906133e2565b801561030b5780601f106102e05761010080835404028352916020019161030b565b820191906000526020600020905b8154815290600101906020018083116102ee57829003601f168201915b5050505050815250509050806000015160ff16600260ff161415610399576001600160a01b0385166000908152600460209081526040808320838052909152902061035a9061ffff8616611b76565b506000600660006103738860008961ffff166001610c50565b8152602081019190915260400160002090506103926003820185611b76565b505061040d565b6001600160a01b038516600090815260046020908152604080832086845290915290206103ca9061ffff8616611b76565b506000600560006103e288878961ffff166001610c50565b81526020019081526020016000209050828160030160008282546104069190613433565b9091555050505b5050505050565b6000546201000090046001600160a01b031633146104445760405162461bcd60e51b81526004016102119061339a565b8151600360ff909116111561048c5760405162461bcd60e51b815260206004820152600e60248201526d6572726f7220657263207479706560901b6044820152606401610211565b80156105065760208201516104a390600190611b82565b50602080830180516001600160a01b03908116600090815260038452604090819020865181549451909316610100026001600160a81b031990941660ff90931692909217929092178155908401518051859361040d926001850192910190612935565b602082015161051790600190611b97565b506020808301516001600160a01b0316600090815260039091526040812080546001600160a81b03191681559061055160018301826129b5565b50505b5050565b6060610565600184611b61565b6105815760405162461bcd60e51b8152600401610211906133bd565b6001600160a01b0380841660009081526003602090815260408083208151606081018352815460ff81168252610100900490951692850192909252600182018054939493918401916105d2906133e2565b80601f01602080910402602001604051908101604052809291908181526020018280546105fe906133e2565b801561064b5780601f106106205761010080835404028352916020019161064b565b820191906000526020600020905b81548152906001019060200180831161062e57829003601f168201915b50505091909252505081519192505060ff1660021461067c5760405162461bcd60e51b8152600401610211906133bd565b6001600160a01b03841660009081526004602090815260408083208380529091528120906106a982611bac565b90506106b6826000611bb6565b6106c8576106c5600182613433565b90505b6000816001600160401b038111156106e2576106e2612b0b565b60405190808252806020026020018201604052801561076557816020015b61075260405180610120016040528060008152602001600060ff168152602001606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816107005790505b50905060005b61077484611bac565b8110156107df5760006006816107998b8261078f8a88611bc2565b61ffff168d610c50565b815260200190815260200160002090506107cc8383815181106107be576107be61344b565b602002602001015182611bce565b50806107d781613461565b91505061076b565b506107eb836000611bb6565b610835576000600660006108028a6000808c610c50565b8152602001908152602001600020905061083382600185610823919061347c565b815181106107be576107be61344b565b505b93505050505b92915050565b6000816040516020016108549190613493565b604051602081830303815290604052805190602001208360405160200161087b9190613493565b6040516020818303038152906040528051906020012014905092915050565b6000546201000090046001600160a01b031633146108ca5760405162461bcd60e51b81526004016102119061339a565b60008160c00151511161090b5760405162461bcd60e51b8152602060048201526009602482015268656d7074792069647360b81b6044820152606401610211565b60005b8160c00151518110156109955760008260c0015182815181106109335761093361344b565b602002602001015160000151116109835760405162461bcd60e51b815260206004820152601460248201527306964206d757374206772656174207468616e20360641b6044820152606401610211565b8061098d81613461565b91505061090e565b5060006109a182611e2c565b805190915060ff166002146109c85760405162461bcd60e51b8152600401610211906133bd565b81516020808401516040808601516060870151608088015160c08901516001600160a01b0388166000908152600488528581208180529097529390952093949193909290610a1a9061ffff8616611b76565b50600060066000610a328960008961ffff1689610c50565b81526020019081526020016000209050610a4c818a612066565b60ff8316610b9c5760ff841660011415610a88576003810160008181610a7282826129f2565b50505050610a83816003018361224d565b610c45565b600781015415610b50576007810154600090610aa69060019061347c565b90505b8015610b41576000826007018281548110610ac657610ac661344b565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509050610b0f8160000151846003016122cb90919063ffffffff16565b50602081015115610b2e57805160009081526006840160205260408120555b5080610b39816134af565b915050610aa9565b50610b50600782016000612a10565b610b5e8182600701846122d7565b610b6c6005820160006129f2565b610b80610b7b82600301612372565b61237f565b8051610b96916005840191602090910190612a31565b50610c45565b60ff831660011415610bb657610b5e8182600801846122d7565b60ff831660021415610bcf57610a83816009018361224d565b60ff831660031415610bfe57600b810160008181610bed82826129f2565b50505050610a8381600b018361224d565b60ff831660041415610c2d576009810160008181610c1c82826129f2565b50505050610a83816009018361224d565b60405162461bcd60e51b8152600401610211906134c6565b505050505050505050565b6040516001600160601b0319606086901b16602082015260348101849052605481018390526001600160f81b031960f883901b1660748201526000906001906075016040516020818303038152906040528051906020012060001c610cb5919061347c565b95945050505050565b6000546201000090046001600160a01b03163314610cee5760405162461bcd60e51b81526004016102119061339a565b60ff861660021415610dca57600060066000610d118a60008861ffff168b610c50565b8152602001908152602001600020905060008461ffff161115610d9c5760ff861660011415610d7657610d476003820184611bb6565b610d635760405162461bcd60e51b8152600401610211906134f4565b610d7060038201846122cb565b50610d9c565b610d80818461239a565b610d9c5760405162461bcd60e51b8152600401610211906134f4565b8415610db557610daf6009820184611b76565b50610dc4565b610dc2600b820184611b76565b505b50610eb4565b60ff8616600314610dda57600091505b600060056000610df08a868861ffff168b610c50565b8152602001908152602001600020905060008461ffff161115610e73578060030154821115610e595760405162461bcd60e51b8152602060048201526015602482015274185b5bdd5b9d08195e18d9595908185b1b1bddd959605a1b6044820152606401610211565b81816003016000828254610e6d919061347c565b90915550505b8415610e985781816006016000828254610e8d9190613433565b90915550610eb29050565b81816007016000828254610eac9190613433565b90915550505b505b50505050505050565b6060610ec96001611bac565b6001600160401b03811115610ee057610ee0612b0b565b604051908082528060200260200182016040528015610f2d57816020015b60408051606080820183526000808352602083015291810191909152815260200190600190039081610efe5790505b50905060005b610f3d6001611bac565b8110156110575760036000610f53600184611bc2565b6001600160a01b03908116825260208083019390935260409182016000208251606081018452815460ff81168252610100900490921693820193909352600183018054919392840191610fa5906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd1906133e2565b801561101e5780601f10610ff35761010080835404028352916020019161101e565b820191906000526020600020905b81548152906001019060200180831161100157829003601f168201915b5050505050815250508282815181106110395761103961344b565b6020026020010181905250808061104f90613461565b915050610f33565b5090565b6060611068600185611b61565b6110845760405162461bcd60e51b8152600401610211906133bd565b6001600160a01b0380851660009081526003602090815260408083208151606081018352815460ff81168252610100900490951692850192909252600182018054939493918401916110d5906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611101906133e2565b801561114e5780601f106111235761010080835404028352916020019161114e565b820191906000526020600020905b81548152906001019060200180831161113157829003601f168201915b50505091909252505081519192505060ff16600214156111805760405162461bcd60e51b8152600401610211906133bd565b805160ff1660031461119157600093505b6001600160a01b03851660009081526004602090815260408083208784529091528120906111be82611bac565b90506111cb826000611bb6565b6111dd576111da600182613433565b90505b6000816001600160401b038111156111f7576111f7612b0b565b60405190808252806020026020018201604052801561127e57816020015b61126b604051806101200160405280600061ffff168152602001600060ff168152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816112155790505b50905060005b61128d84611bac565b81101561147057600560006112b18b8b6112a78987611bc2565b61ffff168c610c50565b81526020808201929092526040908101600020815161012081018352815461ffff8116825262010000900460ff169381019390935260018101805491928401916112fa906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611326906133e2565b80156113735780601f1061134857610100808354040283529160200191611373565b820191906000526020600020905b81548152906001019060200180831161135657829003601f168201915b5050505050815260200160028201805461138c906133e2565b80601f01602080910402602001604051908101604052809291908181526020018280546113b8906133e2565b80156114055780601f106113da57610100808354040283529160200191611405565b820191906000526020600020905b8154815290600101906020018083116113e857829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481526020016007820154815250508282815181106114525761145261344b565b6020026020010181905250808061146890613461565b915050611284565b5061147c836000611bb6565b61164957600560006114918a8a60008b610c50565b81526020808201929092526040908101600020815161012081018352815461ffff8116825262010000900460ff169381019390935260018101805491928401916114da906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611506906133e2565b80156115535780601f1061152857610100808354040283529160200191611553565b820191906000526020600020905b81548152906001019060200180831161153657829003601f168201915b5050505050815260200160028201805461156c906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611598906133e2565b80156115e55780601f106115ba576101008083540402835291602001916115e5565b820191906000526020600020905b8154815290600101906020018083116115c857829003601f168201915b50505091835250506003820154602082015260048201546040820152600582015460608201526006820154608082015260079091015460a0909101528161162d60018561347c565b8151811061163d5761163d61344b565b60200260200101819052505b93505050505b9392505050565b6000546201000090046001600160a01b031633146116865760405162461bcd60e51b81526004016102119061339a565b60008160a00151116116d55760405162461bcd60e51b81526020600482015260186024820152770616d6f756e74206d757374206772656174207468616e20360441b6044820152606401610211565b60006116e082611e2c565b805190915060ff16600214156117085760405162461bcd60e51b8152600401610211906133bd565b8151602083015160408401516060850151608086015160a0870151865160ff1660031461173457600094505b6001600160a01b038616600090815260046020908152604080832088845290915290206117659061ffff8616611b76565b5060006005600061177c89898961ffff1689610c50565b81526020019081526020016000209050611796818a612066565b60ff83166118695760ff8416600114156117b65760038101829055610c45565b806007015481600601546117ca9190613433565b60058201546117d99084613433565b1161184c5760405162461bcd60e51b815260206004820152603f60248201527f6572726f7220616c6c6f636174696f6e2c20616d6f756e742b696e637265617360448201527f6564537570706c79206d757374203e206275726e65642b72656c6561736564006064820152608401610211565b600481018054600383018054918590039091039055829055610c45565b60ff8316600114156118af57818160050160008282546118899190613433565b92505081905550818160030160008282546118a49190613433565b90915550610c459050565b60ff83166002141561194d578060030154821061191e5760405162461bcd60e51b815260206004820152602760248201527f6572726f7220616c6c6f636174696f6e2c20616d6f756e74206d757374203c2060448201526662616c616e636560c81b6064820152608401610211565b818160060160008282546119329190613433565b92505081905550818160030160008282546118a4919061347c565b60ff8316600314156119655760078101829055610c45565b60ff831660041415610c2d5760068101829055610c45565b600054610100900460ff161580801561199d5750600054600160ff909116105b806119b75750303b1580156119b7575060005460ff166001145b611a1a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610211565b6000805460ff191660011790558015611a3d576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610554576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6003602052600090815260409020805460018201805460ff8316936101009093046001600160a01b0316929190611ade906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0a906133e2565b8015611b575780601f10611b2c57610100808354040283529160200191611b57565b820191906000526020600020905b815481529060010190602001808311611b3a57829003601f168201915b5050505050905083565b600061164f836001600160a01b038416612500565b600061164f8383612518565b600061164f836001600160a01b038416612518565b600061164f836001600160a01b038416612562565b600061083b825490565b600061164f8383612500565b600061164f8383612655565b805461ffff8116835262010000900460ff166020830152600181018054611bf4906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611c20906133e2565b8015611c6d5780601f10611c4257610100808354040283529160200191611c6d565b820191906000526020600020905b815481529060010190602001808311611c5057829003601f168201915b50505050508260400181905250806002018054611c89906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb5906133e2565b8015611d025780601f10611cd757610100808354040283529160200191611d02565b820191906000526020600020905b815481529060010190602001808311611ce557829003601f168201915b50505050508260600181905250611d1b81600301612372565b60808301526007810180546040805160208084028201810190925282815292919060009084015b82821015611d8857838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611d42565b5050505060a08301526008810180546040805160208084028201810190925282815292919060009084015b82821015611df957838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611db3565b5050505060c0830152611e0e60098201612372565b60e0830152611e1f600b8201612372565b8261010001819052505050565b604080516060808201835260008083526020830152918101919091528151611e5690600190611b61565b611e725760405162461bcd60e51b8152600401610211906133bd565b6000826040015161ffff1611611ec15760405162461bcd60e51b81526020600482015260146024820152730616c6c6f636174696f6e4964206d757374203e360641b6044820152606401610211565b600160ff16826060015160ff161115611f145760405162461bcd60e51b81526020600482015260156024820152746572726f7220616c6c6f636174696f6e207479706560581b6044820152606401610211565b600460ff16826080015160ff161115611f3f5760405162461bcd60e51b8152600401610211906134c6565b606082015160ff1660011415611f8b57608082015160ff16600114801590611f6f5750608082015160ff16600214155b611f8b5760405162461bcd60e51b8152600401610211906134c6565b81516001600160a01b039081166000908152600360209081526040918290208251606081018452815460ff811682526101009004909416918401919091526001810180549192840191611fdd906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054612009906133e2565b80156120565780601f1061202b57610100808354040283529160200191612056565b820191906000526020600020905b81548152906001019060200180831161203957829003601f168201915b5050505050815250509050919050565b6040810151825461ffff908116911614612090576040810151825461ffff191661ffff9091161782555b6060810151825462010000900460ff9081169116146120c6576060810151825460ff909116620100000262ff0000199091161782555b608081015160ff166105545761216c8260010180546120e4906133e2565b80601f0160208091040260200160405190810160405280929190818152602001828054612110906133e2565b801561215d5780601f106121325761010080835404028352916020019161215d565b820191906000526020600020905b81548152906001019060200180831161214057829003601f168201915b50505050508260e00151610841565b61218d5760e0810151805161218b916001850191602090910190612935565b505b61222882600201805461219f906133e2565b80601f01602080910402602001604051908101604052809291908181526020018280546121cb906133e2565b80156122185780601f106121ed57610100808354040283529160200191612218565b820191906000526020600020905b8154815290600101906020018083116121fb57829003601f168201915b5050505050826101000151610841565b610554576101008101518051612248916002850191602090910190612935565b505050565b60005b815181101561224857600082828151811061226d5761226d61344b565b6020026020010151905060005b816020015181116122b6578151600090612295908390613433565b90506122a18682611b76565b505080806122ae90613461565b91505061227a565b505080806122c390613461565b915050612250565b600061164f8383612562565b60005b81518110156105515760008282815181106122f7576122f761344b565b60209081029190910181015185546001818101885560008881528490208351600290930201828155938301519301929092559150612339906003870190611b76565b5060208101511561235f5760208082015182516000908152600688019092526040909120555b508061236a81613461565b9150506122da565b6060600061164f8361267f565b606061105782600060018551612395919061347c565b6126db565b60058201546000906123ae5750600061083b565b6123bb600b840183611bb6565b156123c85750600061083b565b6123d56009840183611bb6565b156123e25750600061083b565b6005830180546040805160208084028201810190925282815260009361244c939287929190849083018282801561243857602002820191906000526020600020905b815481526020019060010190808311612424575b505050505061285c9092919063ffffffff16565b6005850154909150811080156124805750828460050182815481106124735761247361344b565b9060005260206000200154145b1561248f57600191505061083b565b80156124f6576000600585016124a660018461347c565b815481106124b6576124b661344b565b6000918252602080832090910154808352600688019091526040909120549091506124e18183613433565b85116124f3576001935050505061083b565b50505b5060009392505050565b60009081526001919091016020526040902054151590565b60006125248383612500565b61255a5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561083b565b50600061083b565b6000818152600183016020526040812054801561264b57600061258660018361347c565b855490915060009061259a9060019061347c565b90508181146125ff5760008660000182815481106125ba576125ba61344b565b90600052602060002001549050808760000184815481106125dd576125dd61344b565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061261057612610613523565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061083b565b600091505061083b565b600082600001828154811061266c5761266c61344b565b9060005260206000200154905092915050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156126cf57602002820191906000526020600020905b8154815260200190600101908083116126bb575b50505050509050919050565b8181808214156126ec575050505050565b60008560026126fb8787613539565b612705919061358e565b61270f90876135bc565b8151811061271f5761271f61344b565b602002602001015190505b81831361282e575b808684815181106127455761274561344b565b60200260200101511015612765578261275d816135fd565b935050612732565b8582815181106127775761277761344b565b6020026020010151811015612798578161279081613616565b925050612765565b818313612829578582815181106127b1576127b161344b565b60200260200101518684815181106127cb576127cb61344b565b60200260200101518785815181106127e5576127e561344b565b602002602001018885815181106127fe576127fe61344b565b60209081029190910101919091525282612817816135fd565b935050818061282590613616565b9250505b61272a565b81851215612841576128418686846126db565b83831215612854576128548684866126db565b505050505050565b60008351600014156128705750600061164f565b6000835b808210156128c7576000612888838361291a565b90508487828151811061289d5761289d61344b565b602002602001015111156128b3578091506128c1565b6128be816001613433565b92505b50612874565b6000821180156128f9575083866128df60018561347c565b815181106128ef576128ef61344b565b6020026020010151145b156129125761290960018361347c565b9250505061164f565b50905061164f565b6000612929600284841861362c565b61164f90848416613433565b828054612941906133e2565b90600052602060002090601f01602090048101928261296357600085556129a9565b82601f1061297c57805160ff19168380011785556129a9565b828001600101855582156129a9579182015b828111156129a957825182559160200191906001019061298e565b50611057929150612a6b565b5080546129c1906133e2565b6000825580601f106129d1575050565b601f0160209004906000526020600020908101906129ef9190612a6b565b50565b50805460008255906000526020600020908101906129ef9190612a6b565b50805460008255600202906000526020600020908101906129ef9190612a80565b8280548282559060005260206000209081019282156129a957916020028201828111156129a957825182559160200191906001019061298e565b5b808211156110575760008155600101612a6c565b5b808211156110575760008082556001820155600201612a81565b80356001600160a01b0381168114612ab257600080fd5b919050565b803561ffff81168114612ab257600080fd5b60008060008060808587031215612adf57600080fd5b612ae885612a9b565b9350612af660208601612ab7565b93969395505050506040820135916060013590565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612b4357612b43612b0b565b60405290565b60405161012081016001600160401b0381118282101715612b4357612b43612b0b565b604051601f8201601f191681016001600160401b0381118282101715612b9457612b94612b0b565b604052919050565b803560ff81168114612ab257600080fd5b600082601f830112612bbe57600080fd5b81356001600160401b03811115612bd757612bd7612b0b565b612bea601f8201601f1916602001612b6c565b818152846020838601011115612bff57600080fd5b816020850160208301376000918101602001919091529392505050565b80358015158114612ab257600080fd5b60008060408385031215612c3f57600080fd5b82356001600160401b0380821115612c5657600080fd5b9084019060608287031215612c6a57600080fd5b604051606081018181108382111715612c8557612c85612b0b565b604052612c9183612b9c565b8152612c9f60208401612a9b565b6020820152604083013582811115612cb657600080fd5b612cc288828601612bad565b6040830152509350612cd991505060208401612c1c565b90509250929050565b60008060408385031215612cf557600080fd5b612cfe83612a9b565b9150612cd960208401612b9c565b60005b83811015612d27578181015183820152602001612d0f565b838111156105515750506000910152565b60008151808452612d50816020860160208601612d0c565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015612d9457815187529582019590820190600101612d78565b509495945050505050565b600081518084526020808501945080840160005b83811015612d94578151805188528301518388015260409096019590820190600101612db3565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ef657603f198984030185528151805184528781015160ff16888501528681015161012088860181905290612e3d82870182612d38565b91505060608083015186830382880152612e578382612d38565b9250505060808083015186830382880152612e728382612d64565b9250505060a08083015186830382880152612e8d8382612d9f565b9250505060c08083015186830382880152612ea88382612d9f565b9250505060e08083015186830382880152612ec38382612d64565b925050506101008083015192508582038187015250612ee28183612d64565b968901969450505090860190600101612e01565b509098975050505050505050565b60008060408385031215612f1757600080fd5b82356001600160401b0380821115612f2e57600080fd5b612f3a86838701612bad565b93506020850135915080821115612f5057600080fd5b50612f5d85828601612bad565b9150509250929050565b600082601f830112612f7857600080fd5b813560206001600160401b03821115612f9357612f93612b0b565b612fa1818360051b01612b6c565b82815260069290921b84018101918181019086841115612fc057600080fd5b8286015b848110156108335760408189031215612fdd5760008081fd5b612fe5612b21565b813581528482013585820152835291830191604001612fc4565b60006020828403121561301157600080fd5b81356001600160401b038082111561302857600080fd5b90830190610120828603121561303d57600080fd5b613045612b49565b61304e83612a9b565b81526020830135602082015261306660408401612ab7565b604082015261307760608401612b9c565b606082015261308860808401612b9c565b608082015260a083013560a082015260c0830135828111156130a957600080fd5b6130b587828601612f67565b60c08301525060e0830135828111156130cd57600080fd5b6130d987828601612bad565b60e08301525061010080840135838111156130f357600080fd5b6130ff88828701612bad565b918301919091525095945050505050565b6000806000806080858703121561312657600080fd5b61312f85612a9b565b9350602085013592506040850135915061314b60608601612b9c565b905092959194509250565b600080600080600080600060e0888a03121561317157600080fd5b61317a88612a9b565b965061318860208901612b9c565b955061319660408901612b9c565b94506131a460608901612c1c565b93506131b260808901612ab7565b925060a0880135915060c0880135905092959891949750929550565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ef657888303603f190185528151805160ff168452878101516001600160a01b031688850152860151606087850181905261323781860183612d38565b9689019694505050908601906001016131f5565b60008060006060848603121561326057600080fd5b61326984612a9b565b92506020840135915061327e60408501612b9c565b90509250925092565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612ef657888303603f190185528151805161ffff1684526101208189015160ff8116868b0152508782015181898701526132ee82870182612d38565b915050606080830151868303828801526133088382612d38565b6080858101519089015260a0808601519089015260c0808601519089015260e0808601519089015261010094850151949097019390935250505093860193908601906001016132ae565b60006020828403121561336457600080fd5b61164f82612a9b565b60ff841681526001600160a01b0383166020820152606060408201819052600090610cb590830184612d38565b6020808252600990820152686f6e6c79506f6f6c2160b81b604082015260600190565b6020808252600b908201526a32b93937b9103a37b5b2b760a91b604082015260600190565b600181811c908216806133f657607f821691505b6020821081141561341757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156134465761344661341d565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156134755761347561341d565b5060010190565b60008282101561348e5761348e61341d565b500390565b600082516134a5818460208701612d0c565b9190910192915050565b6000816134be576134be61341d565b506000190190565b6020808252601490820152736572726f72206f7065726174696f6e207479706560601b604082015260600190565b602080825260159082015274746f6b656e4964206e6f7420617661696c61626c6560581b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b60008083128015600160ff1b8501841216156135575761355761341d565b6001600160ff1b03840183138116156135725761357261341d565b50500390565b634e487b7160e01b600052601260045260246000fd5b60008261359d5761359d613578565b600160ff1b8214600019841416156135b7576135b761341d565b500590565b600080821280156001600160ff1b03849003851316156135de576135de61341d565b600160ff1b83900384128116156135f7576135f761341d565b50500190565b60006001600160ff1b038214156134755761347561341d565b6000600160ff1b8214156134be576134be61341d565b60008261363b5761363b613578565b50049056fea2646970667358221220f1ba092051af4ee3d4369d35dbe29c7174563ad2495f7d11c30d83556bdeac6864736f6c63430008080033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
