Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes15kdownloads
ddl.cpython-313.pyc756 linesDownload Raw Back to __pycache__
1�

2��j����SrSSKJr SSKrSSKrSSKJr SSKJr SSKJr SSKJr SSKJ	r	 SS	KJ3r4 SS5KJr SSKJ
r
 SSKJr SS
KJr SSKJr SSKJr SSKJr SSKJr SSKJr SSKJr SSKJr SSKJr SSKJr SSKJr \R<(a`SSKJ r  SSKJ!r! SSKJ"r" SSK#J$r$ SSK#J%r% SSK#J&r& SS K#J'r' SS!K#J(r( SS6K#Jr SS"K#J)r) SS#K*J+r+ SS$K,J-r- SS%K.J/r/ SS&K.J0r0 SS'K.J1r1 SS(K.J2r2 \"S)\S*\34S+9r4"S,S-\5r5"S.S/\5r6"S0S1\Rn5r8"S2S3\Rr\\55r:\:r;"S4S5\:5r<"S6S7\:\\45r="S8S9\=\45r>"S:S;\=\45r?"S<S=\>\35r@"S>S?\?\35rA"S@SA\>SB5rB"SCSD\?SB5rC"SESF\55rD"SGSH\55rE"SISJ\?SB5rF"SKSL\>SM5rG"SNSO\?SM5rH"SPSQ\>SR5rI"SSST\?SR5rJ"SUSV\>SW5rK"SXSY\?SW5rL"SZS[\=SB5rM"S\S]\=SB5rN"S^S_\=S`5rO"SaSb\=S`5rP"ScSd\=SW5rQ"SeSf\=SW5rR"SgSh\5rS"SiSj\S5rT"SkSl\S5rU"SmSn\T5rV"SoSp\U5rWSsStSqjjrXSuSrjrYg)vzq7Provides the hierarchy of DDL-defining schema items as well as routines8to invoke them for a create/drop call.9 10�)�annotationsN)�Any)�Callable)�Generic)�Iterable)�List)�Optional)�Sequence)�Tuple)�TypeVar)�Union�)�roles)�_generative)�11Executable)�
SchemaVisitor)�
ClauseElement�)�exc)�util)�topological)�Protocol)�Self)�Compiled)�DDLCompiler)�
BindParameter)�Column)�12Constraint)�ForeignKeyConstraint)�Index)�13SchemaItem)�Table)�TableClause)�14Connection)�15CacheStats)�CompiledCacheType)�Dialect)�SchemaTranslateMapType�_SIr!)�boundc�R�\rSrSrSrSrSrSSS.S	SjjrSrg)16�BaseDDLElement�=z�The root of DDL constructs, including those that are sub-elements17within the "create table" and other processes.18 19.. versionadded:: 2.020 21Fc�(�UR"X40UD6$)zFReturn a compiler appropriate for this ClauseElement, given a22Dialect.)�ddl_compiler)�self�dialect�kws   �XD:\code\apps\devtools\python\user_packages\Python313\site-packages\sqlalchemy/sql/ddl.py�	_compiler�BaseDDLElement._compilerHs���#�#�G�8�R�8�8�N)�for_executemany�schema_translate_mapc��[5e�N��NotImplementedError)r0r1�compiled_cache�column_keysr7r8r2s       r3�_compile_w_cache�BaseDDLElement._compile_w_cacheNs
��"�#�#r6�)r1r'r=zOptional[CompiledCacheType]r>z	List[str]r7�boolr8z Optional[SchemaTranslateMapType]r2r�returnzJTuple[Compiled, Optional[typing_Sequence[BindParameter[Any]]], CacheStats])	�__name__�23__module__�__qualname__�__firstlineno__�__doc__�_hierarchy_supports_cachingr4r?�__static_attributes__rAr6r3r,r,=sm���#(��B�9�!&�AE�$��$�4�	$�24�$��
$�?�$��$�25�$�$r6r,c�P�\rSrSrSSS.SSjjjrSrg)	�
DDLIfCallable�]N.)�compilerc��gr:rA)	r0�ddl�target�bind�tables�stater1rN�26checkfirsts	         r3�__call__�DDLIfCallable.__call__^s��r6rA�NN)rPr,rQ�Union[SchemaItem, str]rR�Optional[Connection]rSzOptional[List[Table]]rT�
Optional[Any]r1r'rN�Optional[DDLCompiler]rUrBrCrB)rDrErFrGrVrJrAr6r3rLrL]sv��)-�#�
�+.��
��'��#�	�27&���
���(����28��r6rLc�Z�\rSrSr%S\S'S\S'S\S'SSS	jjrS29rg)
�DDLIf�l�
Optional[str]r1�Optional[DDLIfCallable]�	callable_r[rTNc��Ub
URnOUb
URnOS5e[UR[5(aURUR:wagOE[UR[[30[45(aURUR;agURb)UR"UUU4URUUS.UD6(dgg)NFzcompiler or dialect is required)rTr1rNT)	r1�31isinstance�str�name�tuple�list�setrbrT)r0rPrQrRrNr2r1s       r3�_should_execute�DDLIf._should_executeqs������l�l�G�
�
!��&�&�G�;�;�;�5��d�l�l�C�(�(��|�|�w�|�|�+��,�
����u�d�C�&8�
9�
9��|�|�4�<�<�/���>�>�%�d�n�n����/32��*�*���
/33��/34��r6rAr:)rPr,rQrYrRrZrNr\r2rrCrB)rDrErFrG�__annotations__rjrJrAr6r3r^r^ls]��
��&�&���+/� �
� �'� �#�	 �35(� ��
 �36� � r6r^c��\rSrSr%SrSrS\S'SrS\S'Sr\	SS	j5r37\	SSS38jj5rSrSr
S
rSrSrg)�ExecutableDDLElement�aEBase class for standalone executable DDL expression constructs.39 40This class is the base for the general purpose :class:`.DDL` class,41as well as the various create/drop clause constructs such as42:class:`.CreateTable`, :class:`.DropTable`, :class:`.AddConstraint`,43etc.44 45.. versionchanged:: 2.0  :class:`.ExecutableDDLElement` is renamed from46   :class:`.DDLElement`, which still exists for backwards compatibility.47 48:class:`.ExecutableDDLElement` integrates closely with SQLAlchemy events,49introduced in :ref:`event_toplevel`.  An instance of one is50itself an event receiving callable::51 52    event.listen(53        users,54        "after_create",55        AddConstraint(constraint).execute_if(dialect="postgresql"),56    )57 58.. seealso::59 60    :class:`.DDL`61 62    :class:`.DDLEvents`63 64    :ref:`event_toplevel`65 66    :ref:`schema_ddl_sequences`67 68NzOptional[DDLIf]�_ddl_ifzUnion[SchemaItem, str, None]rQc�&�URXU5$r:)�_execute_ddl)r0�69connection�distilled_params�execution_optionss    r3�_execute_on_connection�+ExecutableDDLElement._execute_on_connection�s���&�&��$5�70�	71r6c��XlU$)aReturn a copy of this :class:`_schema.ExecutableDDLElement` which72will include the given target.73 74This essentially applies the given item to the ``.target`` attribute of75the returned :class:`_schema.ExecutableDDLElement` object. This target76is then usable by event handlers and compilation routines in order to77provide services such as tokenization of a DDL string in terms of a78particular :class:`_schema.Table`.79 80When a :class:`_schema.ExecutableDDLElement` object is established as81an event handler for the :meth:`_events.DDLEvents.before_create` or82:meth:`_events.DDLEvents.after_create` events, and the event then83occurs for a given target such as a :class:`_schema.Constraint` or84:class:`_schema.Table`, that target is established with a copy of the85:class:`_schema.ExecutableDDLElement` object using this method, which86then proceeds to the :meth:`_schema.ExecutableDDLElement.execute`87method in order to invoke the actual DDL instruction.88 89:param target: a :class:`_schema.SchemaItem` that will be the subject90 of a DDL operation.91 92:return: a copy of this :class:`_schema.ExecutableDDLElement` with the93 ``.target`` attribute assigned to the given94 :class:`_schema.SchemaItem`.95 96.. seealso::97 98    :class:`_schema.DDL` - uses tokenization against the "target" when99    processing the DDL string.100 101)rQ)r0rQs  r3�against�ExecutableDDLElement.against�s��B���r6c�(�[XU5UlU$)a�Return a callable that will execute this102:class:`_ddl.ExecutableDDLElement` conditionally within an event103handler.104 105Used to provide a wrapper for event listening::106 107    event.listen(108        metadata,109        "before_create",110        DDL("my_ddl").execute_if(dialect="postgresql"),111    )112 113:param dialect: May be a string or tuple of strings.114  If a string, it will be compared to the name of the115  executing database dialect::116 117    DDL("something").execute_if(dialect="postgresql")118 119  If a tuple, specifies multiple dialect names::120 121    DDL("something").execute_if(dialect=("postgresql", "mysql"))122 123:param callable\_: A callable, which will be invoked with124  three positional arguments as well as optional keyword125  arguments:126 127    :ddl:128      This DDL element.129 130    :target:131      The :class:`_schema.Table` or :class:`_schema.MetaData`132      object which is the133      target of this event. May be None if the DDL is executed134      explicitly.135 136    :bind:137      The :class:`_engine.Connection` being used for DDL execution.138      May be None if this construct is being created inline within139      a table, in which case ``compiler`` will be present.140 141    :tables:142      Optional keyword argument - a list of Table objects which are to143      be created/ dropped within a MetaData.create_all() or drop_all()144      method call.145 146    :dialect: keyword argument, but always present - the147      :class:`.Dialect` involved in the operation.148 149    :compiler: keyword argument.  Will be ``None`` for an engine150      level DDL invocation, but will refer to a :class:`.DDLCompiler`151      if this DDL element is being created inline within a table.152 153    :state:154      Optional keyword argument - will be the ``state`` argument155      passed to this function.156 157    :checkfirst:158     Keyword argument, will be True if the 'checkfirst' flag was159     set during the call to ``create()``, ``create_all()``,160     ``drop()``, ``drop_all()``.161 162  If the callable returns a True value, the DDL statement will be163  executed.164 165:param state: any value which will be passed to the callable\_166  as the ``state`` keyword argument.167 168.. seealso::169 170    :meth:`.SchemaItem.ddl_if`171 172    :class:`.DDLEvents`173 174    :ref:`event_toplevel`175 176)r^rp)r0r1rbrTs    r3�177execute_if�ExecutableDDLElement.execute_if�s��f�W��7����r6c�Z�URcgURR"XU40UD6$�NT)rprj�r0rQrRr2s    r3rj�$ExecutableDDLElement._should_execute9s+���<�<����<�<�/�/��d�I�b�I�Ir6c�h�URURU5(aURU5$gr:)rjrQ�execute)r0rRs  r3�_invoke_with�!ExecutableDDLElement._invoke_with?s-��������T�2�2��<�<��%�%�3r6c�D�URU5RU5 g)z"Execute the DDL as a ddl_listener.N)ryr�r�s    r3rV�ExecutableDDLElement.__call__Cs��	
���V��)�)�$�/r6c��URRUR5nURR5UlU$r:)�	__class__�__new__�__dict__�copy)r0�ss  r3�	_generate�ExecutableDDLElement._generateHs3���N�N�"�"�4�>�>�2���]�]�'�'�)��178��r6)rprQ)rQr!rCr)NNN)r1r`rbrarTr[rCr)rDrErFrGrHrprlrQrvrryr|rjr�rVr�rJrAr6r3rnrn�s����@ $�G�_�#�+/�F�(�/�179��!��!�F�"&�-1�#�	S��S�+�S��	S�180181�S��S�jJ�&�0�182r6rnc�,�\rSrSrSrSrSSjrSrSrg)	�DDLiRa�A literal DDL statement.183 184Specifies literal SQL DDL to be executed by the database.  DDL objects185function as DDL event listeners, and can be subscribed to those events186listed in :class:`.DDLEvents`, using either :class:`_schema.Table` or187:class:`_schema.MetaData` objects as targets.188Basic templating support allows189a single DDL instance to handle repetitive tasks for multiple tables.190 191Examples::192 193  from sqlalchemy import event, DDL194 195  tbl = Table("users", metadata, Column("uid", Integer))196  event.listen(tbl, "before_create", DDL("DROP TRIGGER users_trigger"))197 198  spow = DDL("ALTER TABLE %(table)s SET secretpowers TRUE")199  event.listen(tbl, "after_create", spow.execute_if(dialect="somedb"))200 201  drop_spow = DDL("ALTER TABLE users SET secretpowers FALSE")202  connection.execute(drop_spow)203 204When operating on Table events, the following ``statement``205string substitutions are available:206 207.. sourcecode:: text208 209  %(table)s  - the Table name, with any required quoting applied210  %(schema)s - the schema name, with any required quoting applied211  %(fullname)s - the Table name including schema, quoted if needed212 213The DDL's "context", if any, will be combined with the standard214substitutions noted above.  Keys present in the context will override215the standard substitutions.216 217rPNc��[U[5(d[R"SU-5eXlU=(d 0Ulg)a}Create a DDL statement.218 219:param statement:220  A string or unicode string to be executed.  Statements will be221  processed with Python's string formatting operator using222  a fixed set of string substitutions, as well as additional223  substitutions provided by the optional :paramref:`.DDL.context`224  parameter.225 226  A literal '%' in a statement must be escaped as '%%'.227 228  SQL bind parameters are not available in DDL statements.229 230:param context:231  Optional dictionary, defaults to None.  These values will be232  available for use in string substitutions on the DDL statement.233 234.. seealso::235 236    :class:`.DDLEvents`237 238    :ref:`event_toplevel`239 240z4Expected a string or unicode SQL statement, got '%r'N)rdrer�
ArgumentError�	statement�context)r0r�r�s   r3�__init__�DDL.__init__zsA��4�)�S�)�)��#�#�F����
�241#���}�"��r6c��[UR5/nUR(aURSUR35 S[	U5R242<S[
U5<SSRU5<S3$)Nzcontext=�<�@z; �, �>)�reprr�r��append�typerD�id�join)r0�partss  r3�__repr__�DDL.__repr__�s^���d�n�n�%�&���<�<��L�L�8�D�L�L�>�2�3��
��J����t�H��I�I�e��243�	244r6)r�r�r:)	rDrErFrGrH�__visit_name__r�r�rJrAr6r3r�r�Rs��#�J�N�!%�F	245r6r�c�D�\rSrSr%SrS\S'S246Sjr\S5rSr	Sr247g	)�_CreateDropBasei�z�Base class for DDL constructs that represent CREATE and DROP or248equivalents.249 250The common theme of _CreateDropBase is a single251``element`` attribute which refers to the element252to be created or dropped.253 254r)�elementc�D�U=UlUl[USS5Ulg)Nrp)r�rQ�getattrrp�r0r�s  r3r��_CreateDropBase.__init__�s ��%,�,���t�{��w�	�4�8��r6c�p�[UR[5(aeURR$r:)rdr�re�create_drop_stringify_dialect)r0s r3�stringify_dialect�!_CreateDropBase.stringify_dialect�s)���d�l�l�C�0�0�0�0��|�|�9�9�9r6c��g)z�Allow disable of _create_rule using a callable.255 256Pass to _create_rule using257util.portable_instancemethod(self._create_rule_disable)258to retain serializability.259 260FrA)r0rNs  r3�_create_rule_disable�$_CreateDropBase._create_rule_disable�s��r6)rpr�rQN)r�r)rC�None)rDrErFrGrHrlr��propertyr�r�rJrAr6r3r�r��s,����L�9��:��:�r6r�c�0^�\rSrSrSSU4SjjjrSrU=r$)�_CreateBasei�c�0>�[TU]U5 X lgr:)�superr��
if_not_exists�r0r�r�r�s   �r3r��_CreateBase.__init__�s���
����!�*�r6�r��F)r�r)r�rBrCr��rDrErFrGr�rJ�
__classcell__�r�s@r3r�r��s
���+�+r6r�c�0^�\rSrSrSSU4SjjjrSrU=r$)�	_DropBasei�c�0>�[TU]U5 X lgr:)r�r��	if_exists�r0r�r�r�s   �r3r��_DropBase.__init__�s���
����!�"�r6�r�r�)r�r)r�rBrCr�r�r�s@r3r�r��s
���#�#r6r�c�H^�\rSrSrSrSrSrSSU4SjjjrSrU=r	$)	�CreateSchemai�z[Represent a CREATE SCHEMA statement.261 262The argument here is the string name of the schema.263 264�
create_schema�defaultc� >�[TU]XS9 g)z.Create a new :class:`.CreateSchema` construct.)r�r�N�r�r�)r0rfr�r�s   �r3r��CreateSchema.__init__�s���	�����Cr6rAr�)rfrer�rBrCr��265rDrErFrGrHr�r�r�rJr�r�s@r3r�r��sE����%�N�!��266$�D��D��D�267�	D�Dr6r�c�N^�\rSrSrSrSrSrSSU4SjjjrSrU=r	$)	�268DropSchemai�zYRepresent a DROP SCHEMA statement.269 270The argument here is the string name of the schema.271 272�drop_schemar�c�,>�[TU]XS9 X lg)z,Create a new :class:`.DropSchema` construct.)r�r�N)r�r��cascade)r0rfr�r�r�s    �r3r��DropSchema.__init__�s���	�����;��r6�r�)FF)rfrer�rBr�rBrCr�r�r�s@r3r�r��sM����#�N�!��273��		��	��	��		�274275�	�	r6r�c�J^�\rSrSrSrSrSSU4SjjjrSrU=r$)�CreateTableiz#Represent a CREATE TABLE statement.�create_tablec�>�[TU]XS9 URVs/sHn[U5PM snUlX lgs snf)a+Create a :class:`.CreateTable` construct.276 277:param element: a :class:`_schema.Table` that's the subject278 of the CREATE279:param on: See the description for 'on' in :class:`.DDL`.280:param include_foreign_key_constraints: optional sequence of281 :class:`_schema.ForeignKeyConstraint` objects that will be included282 inline within the CREATE construct; if omitted, all foreign key283 constraints that do not specify use_alter=True are included.284 285:param if_not_exists: if True, an IF NOT EXISTS operator will be286 applied to the construct.287 288 .. versionadded:: 1.4.0b2289 290r�N)r�r��columns�CreateColumn�include_foreign_key_constraints)r0r�r�r��columnr�s     �r3r��CreateTable.__init__s@���0	�����>�;B�?�?�K�?���V�,�?�K���/N�,��Ls�A)r�r��NF)r�r"r�z/Optional[typing_Sequence[ForeignKeyConstraint]]r�rBrCr��	rDrErFrGrHr�r�rJr�r�s@r3r�r�sI���-�#�N�
�#�
O��O�*291�O��
O�292�O�Or6r�r"c��\rSrSrSrSrSrg)�	_DropViewi#z�Semi-public 'DROP VIEW' construct.293 294Used by the test suite for dialect-agnostic drops of views.295This object will eventually be part of a public "view" API.296 297�	drop_viewrAN�rDrErFrGrHr�rJrAr6r3r�r�#s���!�Nr6r�c�*�\rSrSr%S\S'SSjrSrg)�CreateConstrainti.rr�c��Xlgr:�r�r�s  r3r��CreateConstraint.__init__1����r6r�N)r�rrCr�)rDrErFrGrlr�rJrAr6r3r�r�.s
��
��r6r�c�2�\rSrSr%SrSrS\S'S	SjrSrg)298r�i5aX
Represent a :class:`_schema.Column`299as rendered in a CREATE TABLE statement,300via the :class:`.CreateTable` construct.301 302This is provided to support custom column DDL within the generation303of CREATE TABLE statements, by using the304compiler extension documented in :ref:`sqlalchemy.ext.compiler_toplevel`305to extend :class:`.CreateColumn`.306 307Typical integration is to examine the incoming :class:`_schema.Column`308object, and to redirect compilation if a particular flag or condition309is found::310 311    from sqlalchemy import schema312    from sqlalchemy.ext.compiler import compiles313 314 315    @compiles(schema.CreateColumn)316    def compile(element, compiler, **kw):317        column = element.element318 319        if "special" not in column.info:320            return compiler.visit_create_column(element, **kw)321 322        text = "%s SPECIAL DIRECTIVE %s" % (323            column.name,324            compiler.type_compiler.process(column.type),325        )326        default = compiler.get_column_default_string(column)327        if default is not None:328            text += " DEFAULT " + default329 330        if not column.nullable:331            text += " NOT NULL"332 333        if column.constraints:334            text += " ".join(335                compiler.process(const) for const in column.constraints336            )337        return text338 339The above construct can be applied to a :class:`_schema.Table`340as follows::341 342    from sqlalchemy import Table, Metadata, Column, Integer, String343    from sqlalchemy import schema344 345    metadata = MetaData()346 347    table = Table(348        "mytable",349        MetaData(),350        Column("x", Integer, info={"special": True}, primary_key=True),351        Column("y", String(50)),352        Column("z", String(20), info={"special": True}),353    )354 355    metadata.create_all(conn)356 357Above, the directives we've added to the :attr:`_schema.Column.info`358collection359will be detected by our custom compilation scheme:360 361.. sourcecode:: sql362 363    CREATE TABLE mytable (364            x SPECIAL DIRECTIVE INTEGER NOT NULL,365            y VARCHAR(50),366            z SPECIAL DIRECTIVE VARCHAR(20),367        PRIMARY KEY (x)368    )369 370The :class:`.CreateColumn` construct can also be used to skip certain371columns when producing a ``CREATE TABLE``.  This is accomplished by372creating a compilation rule that conditionally returns ``None``.373This is essentially how to produce the same effect as using the374``system=True`` argument on :class:`_schema.Column`, which marks a column375as an implicitly-present "system" column.376 377For example, suppose we wish to produce a :class:`_schema.Table`378which skips379rendering of the PostgreSQL ``xmin`` column against the PostgreSQL380backend, but on other backends does render it, in anticipation of a381triggered rule.  A conditional compilation rule could skip this name only382on PostgreSQL::383 384    from sqlalchemy.schema import CreateColumn385 386 387    @compiles(CreateColumn, "postgresql")388    def skip_xmin(element, compiler, **kw):389        if element.element.name == "xmin":390            return None391        else:392            return compiler.visit_create_column(element, **kw)393 394 395    my_table = Table(396        "mytable",397        metadata,398        Column("id", Integer, primary_key=True),399        Column("xmin", Integer),400    )401 402Above, a :class:`.CreateTable` construct will generate a ``CREATE TABLE``403which only includes the ``id`` column in the string; the ``xmin`` column404will be omitted, but only against the PostgreSQL backend.405 406�
create_column�Column[Any]r�c��Xlgr:r�r�s  r3r��CreateColumn.__init__�r�r6r�N)r�r�rCr�)	rDrErFrGrHr�rlr�rJrAr6r3r�r�5s��l�\%�N�
��r6r�c�8^�\rSrSrSrSrSSU4SjjjrSrU=r$)�	DropTablei�z!Represent a DROP TABLE statement.�407drop_tablec� >�[TU]XS9 g)aCreate a :class:`.DropTable` construct.408 409:param element: a :class:`_schema.Table` that's the subject410 of the DROP.411:param on: See the description for 'on' in :class:`.DDL`.412:param if_exists: if True, an IF EXISTS operator will be applied to the413 construct.414 415 .. versionadded:: 1.4.0b2416 417r�Nr�r�s   �r3r��DropTable.__init__�s���	�����6r6rAr�)r�r"r�rBrCr�r�r�s@r3r�r��s���+�!�N�7�7r6r�c��\rSrSrSrSrSrg)�CreateSequencei�z&Represent a CREATE SEQUENCE statement.�create_sequencerANr�rAr6r3r�r��s418��0�&�Nr6r�r419c��\rSrSrSrSrSrg)�DropSequencei�z$Represent a DROP SEQUENCE statement.�
drop_sequencerANr�rAr6r3r�r��s420��.�$�Nr6r�c�8^�\rSrSrSrSrSSU4SjjjrSrU=r$)�CreateIndexi�z#Represent a CREATE INDEX statement.�create_indexc� >�[TU]XS9 g)z�Create a :class:`.Createindex` construct.421 422:param element: a :class:`_schema.Index` that's the subject423 of the CREATE.424:param if_not_exists: if True, an IF NOT EXISTS operator will be425 applied to the construct.426 427 .. versionadded:: 1.4.0b2428 429r�Nr�r�s   �r3r��CreateIndex.__init__�s���	�����>r6rAr�)r�r r�rBrCr�r�r�s@r3r�r��s���-�#�N�?�?r6r�r c�8^�\rSrSrSrSrSSU4SjjjrSrU=r$)�	DropIndexi�z!Represent a DROP INDEX statement.�430drop_indexc� >�[TU]XS9 g)z�Create a :class:`.DropIndex` construct.431 432:param element: a :class:`_schema.Index` that's the subject433 of the DROP.434:param if_exists: if True, an IF EXISTS operator will be applied to the435 construct.436 437 .. versionadded:: 1.4.0b2438 439r�Nr�r�s   �r3r��DropIndex.__init__�s���	�����6r6rAr�)r�r r�rBrCr�r�r�s@r3rr�s���+�!�N�7�7r6rc�F^�\rSrSrSrSrSS.SU4SjjjrSrU=r$)	�
AddConstrainti�z2Represent an ALTER TABLE ADD CONSTRAINT statement.�add_constraintT)�isolate_from_tablec�~>�[TU]U5 U(a&[R"UR5Ulgg)a�Construct a new :class:`.AddConstraint` construct.440 441:param element: a :class:`.Constraint` object442 443:param isolate_from_table: optional boolean, defaults to True.  Has444 the effect of the incoming constraint being isolated from being445 included in a CREATE TABLE sequence when associated with a446 :class:`.Table`.447 448 .. versionadded:: 2.0.39 - added449    :paramref:`.AddConstraint.isolate_from_table`, defaulting450    to True.  Previously, the behavior of this parameter was implicitly451    turned on in all cases.452 453N)r�r�r�portable_instancemethodr��_create_rule)r0r�r454r�s   �r3r��AddConstraint.__init__�s6���*	����!��#'�#?�#?��)�)�$�G� �r6rA)r�rr455rBrCr�r�r�s@r3rr�s6���<�%�N�$(�	���!�	�456457��r6rrc�V^�\rSrSrSrSrSSSS.S	U4SjjjrSrU=r$)458�DropConstraintiz3Represent an ALTER TABLE DROP CONSTRAINT statement.�drop_constraintFT)r�r�r459c�>�X l[TU]"U4SU0UD6 U(a&[R"UR4605Ulgg)a�Construct a new :class:`.DropConstraint` construct.461 462:param element: a :class:`.Constraint` object463:param cascade: optional boolean, indicates backend-specific464 "CASCADE CONSTRAINT" directive should be rendered if available465:param if_exists: optional boolean, indicates backend-specific466 "IF EXISTS" directive should be rendered if available467:param isolate_from_table: optional boolean, defaults to True.  Has468 the effect of the incoming constraint being isolated from being469 included in a CREATE TABLE sequence when associated with a470 :class:`.Table`.471 472 .. versionadded:: 2.0.39 - added473    :paramref:`.DropConstraint.isolate_from_table`, defaulting474    to True.  Previously, the behavior of this parameter was implicitly475    turned on in all cases.476 477r�N)r�r�r�rrr�r
)r0r�r�r�r478r2r�s      �r3r��DropConstraint.__init__sE���6��
����<�I�<��<��#'�#?�#?��)�)�$�G� �r6r�)r�rr�rBr�rBr479rBr2rrCr�r�r�s@r3rrsZ���=�&�N���#'�
!��!��	!�480�!�!�
!��!�481�!�!r6rc��\rSrSrSrSrSrg)�SetTableCommenti=z*Represent a COMMENT ON TABLE IS statement.�set_table_commentrANr�rAr6r3rr=s482��4�(�Nr6rc��\rSrSrSrSrSrg)�DropTableCommentiCz^Represent a COMMENT ON TABLE '' statement.483 484Note this varies a lot across database backends.485 486�drop_table_commentrANr�rAr6r3rrCs���*�Nr6rc��\rSrSrSrSrSrg)�SetColumnCommentiMz+Represent a COMMENT ON COLUMN IS statement.�set_column_commentrANr�rAr6r3rrMs487��5�)�Nr6rr�c��\rSrSrSrSrSrg)�DropColumnCommentiSz0Represent a COMMENT ON COLUMN IS NULL statement.�drop_column_commentrANr�rAr6r3rrSs488��:�*�Nr6rc��\rSrSrSrSrSrg)�SetConstraintCommentiYz/Represent a COMMENT ON CONSTRAINT IS statement.�set_constraint_commentrANr�rAr6r3r!r!Ys489��9�-�Nr6r!c��\rSrSrSrSrSrg)�DropConstraintCommenti_z4Represent a COMMENT ON CONSTRAINT IS NULL statement.�drop_constraint_commentrANr�rAr6r3r$r$_s490��>�.�Nr6r$c�>�\rSrSrSr\RS5rSrg)�
InvokeDDLBaseiec�N�XlU(aSUR535eg)NzUnexpected keywords: )rs�keys)r0rsr2s   r3r��InvokeDDLBase.__init__fs$��$���:�.�r�w�w�y�k�:�:�v�2r6c��[5e)�\helper context manager that will apply appropriate DDL events491to a CREATE or DROP operation.r;�r0rQr2s   r3�with_ddl_events�InvokeDDLBase.with_ddl_eventsjs
��492"�#�#r6)rsN)	rDrErFrGr��493contextlib�contextmanagerr.rJrAr6r3r'r'es!��;����$��$r6r'c�8�\rSrSr\R494S5rSrg)�InvokeCreateDDLBaseirc+�# �URR"XR4SU0UD6 Sv� URR"XR4SU0UD6 g7f�r,�_ddl_runnerN)�dispatch�
before_creaters�after_creater-s   r3r.�#InvokeCreateDDLBase.with_ddl_eventsss^���495	���%�%��O�O�	496�15�	497�9;�	498�	����$�$��O�O�	499�15�	500�9;�	501���AArAN�rDrErFrGr0r1r.rJrAr6r3r3r3r������502503��504505r6r3c�8�\rSrSr\R506S5rSrg)�InvokeDropDDLBasei�c+�# �URR"XR4SU0UD6 Sv� URR"XR4SU0UD6 g7fr5)r7�before_droprs�507after_dropr-s   r3r.�!InvokeDropDDLBase.with_ddl_events�s^���508	���#�#��O�O�	509�15�	510�9;�	511�	����"�"��O�O�	512�15�	513�9;�	514�r;rANr<rAr6r3r?r?�r=r6r?c�p^�\rSrSrSU4SjjrSrSrSrSrS
Sjr	Sr515SS	jrSS516jrSr
U=r$)�SchemaGeneratori�c�|>�[TU]"U40UD6 X0lX@lURUlXl0Ulgr:�r�r�rUrS�identifier_preparer�preparerr1�memo�r0r1rsrUrS�kwargsr�s      �r3r��SchemaGenerator.__init__��:���	����.�v�.�$�����3�3��
�����	r6c�^�URRUR5 URR	U5nU(aURRU5 UR517(+=(d4 URR
URURUS9(+$�N)�schema�r1�validate_identifierrfrs�schema_for_objectrU�	has_table�r0�table�effective_schemas   r3�_can_create_table�!SchemaGenerator._can_create_table�s������(�(����4��?�?�<�<�U�C����L�L�,�,�-=�>��?�?�"�518�$�,�,�*@�*@��O�O�U�Z�Z�0@�+A�+519�'520�	521r6c�R�URRUR5nU(aURR	U5 UR522(+=(dI URR
URURRURUS9(+$rP�rsrTrWr1rSrU�	has_indexrf�r0�indexrXs   r3�_can_create_index�!SchemaGenerator._can_create_index�s���?�?�<�<�U�[�[�I����L�L�,�,�-=�>��?�?�"�523�$�,�,�*@�*@��O�O��K�K����J�J�#�	+A�+524�'525�	526r6c�~�URRU5nURR=(a� URR(+=(d UR527(+=(aL UR(+=(d4 URRURURUS9(+$rP�	rsrTr1�supports_sequences�sequences_optional�optionalrU�has_sequencerf�r0�sequencerXs   r3�_can_create_sequence�$SchemaGenerator._can_create_sequence�s����?�?�<�<�X�F���|�|�.�.�528����0�0�
0�
I��8I�8I�4I�
��O�O�#���|�|�0�0��O�O�X�]�]�;K�1���		529r6c	���URb
URnO#[URR55n[UVs/sHo0R	U5(dMUPM sn5nUR530R5Vs/sH,nURbMURU5(dM*UPM. nnUVVs/sHup7UcM531UPM nnnURUUURS9 UHn	URU	SS9 M UH6up�U532bURU533SUSS9 MUHnURU5 M M8 SSS5 gs snfs snfs snnf!,(df   g=f)N�rSrUT��	create_ok)ror��_is_metadata_operation)rSrh�values�sort_tables_and_constraintsrY�534_sequencesr�rjr.rU�traverse_single)
r0�metadatarS�t�535collectionr��seq_coll�fks�event_collection�seqrW�fkcs�fkcs
             r3�visit_metadata�SchemaGenerator.visit_metadata�sj���;�;�"��[�[�F��(�/�/�0�0�2�3�F�0��<��1�"8�"8��";�Q��<�536�537��(�(�/�/�1�538�1���x�x�
�$(�$=�$=�a�$@�
�1�	�539�/9�J�j�(�1�A�A�j��J�
�
!�
!��#����"�540�541 ���$�$�S�D�$�9� � *����$��(�(��"&�8<�/3�	)�� $���,�,�S�1� $� *�542�543��
=��544��K�545�546�s7�E�$E�
E�"E�:E�	E!�E!�8AE'�'547E5c�(�U(dURU5(dgURUURUS9 URH-nURcMURUR5 M/ URR(dSn[UUS9RUR5 [US5(a#URHnURUSS9 M URR(a�URR(d�URb$[!U5RUR5 URH6nURcM[#U5RUR5 M8 URR$(aFUR&H6nURcMURR)[+U55 M8 SSS5 g!,(df   g=f)N�rUrp)r��indexesTrn)rYr.rUr�r�rtr1�supports_alterr�r�rs�hasattrr��supports_comments�inline_comments�commentrr�supports_constraint_comments�constraintsr�r!)r0rWror�rpr�r_�548constraints        r3�visit_table�SchemaGenerator.visit_table�s�����!7�!7��!>�!>��
�
!�
!�����#9�"�549�550 �-�-���>�>�-��(�(����8�(��<�<�.�.�26�/���3�
�551�l�4�?�?�+��u�i�(�(�"�]�]�E��(�(��$�(�?�+����.�.����4�4��=�=�,�#�E�*�7�7����H�#�m�m�F��~�~�1�(��0�=�=�d�o�o�N�,��<�<�<�<�&+�&7�&7�552�%�-�-�9� �O�O�3�3� 4�Z� @��'8�I553�554�555�s�H�DH�1AH�(H�556Hc���URR(dgURU5 [U5R	UR5575 SSS5 g!,(df   g=fr:)r1r�r.rr�rs�r0r�s  r3�visit_foreign_key_constraint�,SchemaGenerator.visit_foreign_key_constraintsC���|�|�*�*��
�
!�
!�*�
-��*�%�2�2�4�?�?�C�.�
-�
-���%A�558A*c���U(dURU5(dgURU5 [U5RUR5 SSS5 g!,(df   g=fr:)rjr.r�r�rs)r0riros   r3�visit_sequence�SchemaGenerator.visit_sequencesI����!:�!:�8�!D�!D��
�
!�
!�(�
+��8�$�1�1�$�/�/�B�,�
+�
+���%A�559A,c���U(dURU5(dgURU5 [U5RUR5 SSS5 g!,(df   g=fr:)r`r.r�r�rs)r0r_ros   r3�visit_index�SchemaGenerator.visit_index#sI����!7�!7��!>�!>��
�
!�
!�%�
(����+�+�D�O�O�<�)�
(�
(�r��rUr1rJrIrS�FN)FNFr�)rDrErFrGr�rYr`rjr~r�r�r�r�rJr�r�s@r3rErE�sG���<@��560�	561�562�$2�R�(,�$�2�hD�C�=�=r6rEc�p^�\rSrSrSU4SjjrSrSrSrSrS
Sjr	SSjr563S	rS
S564jrSr
U=r$)�
SchemaDropperi*c�|>�[TU]"U40UD6 X0lX@lURUlXl0Ulgr:rGrKs      �r3r��SchemaDropper.__init__+rNr6c�z^�TRb
TRnO#[URR55nUVs/sHnTRU5(dMUPM nn[[	[UU4SjS955nUR$R5Vs/sHnTR'U5(dMUPM nnUVV	s/sHup9UcM565UPM n566nn	TR)UU567TR*S	9 UH6up�UbTR-US568S569US9 MUHn
TR-U
5 M M8 UHnTR-X�R.SLS9 M  SSS5 gs snf![RGanTRR(dz[R"SSR[URVs/sHo3RPM Os snfsn55-5 WVs/sHo3S4PM Os snfnnSnAGN�[R"UR SURUR"SSR[URVs/sHo3RPM Os snfsn55-S9UeSnAff=fs snfs sn	nf!,(df   g=f)
Nc�\>�TRR(a
URcS$S$r�)r1r�rf)r�r0s �r3�<lambda>�.SchemaDropper.visit_metadata.<locals>.<lambda>As.���#'�<�<�#>�#>�)���6�"�&�"&�&r6)�	filter_fna4Can't sort tables for DROP; an unresolvable foreign key dependency exists between tables: %s; and backend does not support ALTER.  To restore at least a partial sort, apply use_alter=True to ForeignKey and ForeignKeyConstraint objects involved in the cycle to mark these as known cycles that will be ignored.r�rArz�Can't sort tables for DROP; an unresolvable foreign key dependency exists between tables: %s.  Please ensure that the ForeignKey and ForeignKeyConstraint objects involved in the cycle have names so that they can be dropped using DROP CONSTRAINT.)�msgrmT)�drop_okrp�_ignore_sequences)r�)rSrhrq�_can_drop_table�reversedrrr�CircularDependencyErrorr1r�r�warnr��sorted�cycles�fullname�args�edgesrs�_can_drop_sequencer.rUrtr�)r0rurSrv�unsorted_tablesrw�err2r�rxryrzrWr|r}r{s`              r3r~�SchemaDropper.visit_metadata5sn����;�;�"��[�[�F��(�/�/�0�0�2�3�F�*	�*0�L�&�Q�D�4H�4H��4K�q�&�O�L���/�'�#��570��J�X�(�(�/�/�1�571�1���&�&�q�)�
�1�	�572�/9�J�j�(�1�A�A�j��J�
�
!�
!��#����"�573�574 *����$��(�(�� $�/3�*2�	)�� $���,�,�S�1� $� *� ���$�$�S�*�*��2D�$�E� �#575�576��gM���*�*�	��<�<�.�.��	�	�3��y�y��T�[�[�(I�[����[��(I�!J�K�M�577�0?�?��!�"�g���?�578�?�579��1�1��I�I�a�L��K�K��J�J�'��y�y��T�[�[�(I�[����[��(I�!J�K�M�	����	��:580��K�581�582�s��E1�E,�"E,�("E1�&J!�J!�	J&�J&�A!J,�,E1�1J�A583J�G&�%J�
H�
J�AJ�.J�J�J�,584J:c�T�URRUR5 URR	U5nU(aURRU5 UR585(+=(d/ URR
URURUS9$rPrRrVs   r3r��SchemaDropper._can_drop_table�s}�����(�(����4��?�?�<�<�U�C����L�L�,�,�-=�>��?�?�"�586�d�l�l�&<�&<��O�O�U�Z�Z�0@�'=�'587�	588r6c�H�URRUR5nU(aURR	U5 UR589(+=(dD URR
URURRURUS9$rPr\r^s   r3�_can_drop_index�SchemaDropper._can_drop_index�sy���?�?�<�<�U�[�[�I����L�L�,�,�-=�>��?�?�"�590�d�l�l�&<�&<��O�O��K�K����J�J�#�	'=�'591�	592r6c�t�URRU5nURR=(a� URR(+=(d UR593(+=(aG UR(+=(d/ URRURURUS9$rPrcrhs   r3r�� SchemaDropper._can_drop_sequence�s����?�?�<�<�X�F���|�|�.�.�594����0�0�
0�
I��8I�8I�4I�
��O�O�#���<�<�,�,��O�O�X�]�]�;K�-��		595r6c���U(dURU5(dgURU5 [U5"XR5 SSS5 g!,(df   g=fr:)r�r.rrs)r0r_r�s   r3r��SchemaDropper.visit_index�sC���t�3�3�E�:�:��
�
!�
!�%�
(��e��U�O�O�4�)�
(�
(�s�A�596A#c��U(dURU5(dgURUURUS9 [U5R	UR5975 URH?nURcMURU;dM$URUR5 MA SSS5 g!,(df   g=f)Nr�)	r�r.rUr�r�rsr�r�rt)r0rWr�rpr�r�s      r3r��SchemaDropper.visit_table�s����t�3�3�E�:�:��
�
!�
!�����#9�"�598�599
�e��)�)�$�/�/�:� �-�-���N�N�.����.?�?��(�(����8�(�600�601�602�s�?B7�=B7�B7�7603Cc���URR(dgURU5 [U5R	UR6045 SSS5 g!,(df   g=fr:)r1r�r.rr�rsr�s  r3r��*SchemaDropper.visit_foreign_key_constraint�sC���|�|�*�*��
�
!�
!�*�
-��:�&�3�3�D�O�O�D�.�
-�
-�r�c���U(dURU5(dgURU5 [U5RUR5 SSS5 g!,(df   g=fr:)r�r.r�r�rs)r0rir�s   r3r��SchemaDropper.visit_sequence�sI���t�6�6�x�@�@��
�
!�
!�(�
+���"�/�/����@�,�
+�
+�r�r�r�r�)FFrA)rDrErFrGr�r~r�r�r�r�r�r�r�rJr�r�s@r3r�r�*sI���<@��LF�\605�	606�607608�5��$��9�>E�A�Ar6r�c�x^�Ub	UmU4SjnOSn[UUUSS9VVs/sHupEUcM609UPM snn$s snnf)ai	Sort a collection of :class:`_schema.Table` objects based on610dependency.611 612This is a dependency-ordered sort which will emit :class:`_schema.Table`613objects such that they will follow their dependent :class:`_schema.Table`614objects.615Tables are dependent on another based on the presence of616:class:`_schema.ForeignKeyConstraint`617objects as well as explicit dependencies618added by :meth:`_schema.Table.add_is_dependent_on`.619 620.. warning::621 622    The :func:`._schema.sort_tables` function cannot by itself623    accommodate automatic resolution of dependency cycles between624    tables, which are usually caused by mutually dependent foreign key625    constraints. When these cycles are detected, the foreign keys626    of these tables are omitted from consideration in the sort.627    A warning is emitted when this condition occurs, which will be an628    exception raise in a future release.   Tables which are not part629    of the cycle will still be returned in dependency order.630 631    To resolve these cycles, the632    :paramref:`_schema.ForeignKeyConstraint.use_alter` parameter may be633    applied to those constraints which create a cycle.  Alternatively,634    the :func:`_schema.sort_tables_and_constraints` function will635    automatically return foreign key constraints in a separate636    collection when cycles are detected so that they may be applied637    to a schema separately.638 639    .. versionchanged:: 1.3.17 - a warning is emitted when640       :func:`_schema.sort_tables` cannot perform a proper sort due to641       cyclical dependencies.  This will be an exception in a future642       release.  Additionally, the sort will continue to return643       other tables not involved in the cycle in dependency order644       which was not the case previously.645 646:param tables: a sequence of :class:`_schema.Table` objects.647 648:param skip_fn: optional callable which will be passed a649 :class:`_schema.ForeignKeyConstraint` object; if it returns True, this650 constraint will not be considered as a dependency.  Note this is651 **different** from the same parameter in652 :func:`.sort_tables_and_constraints`, which is653 instead passed the owning :class:`_schema.ForeignKeyConstraint` object.654 655:param extra_dependencies: a sequence of 2-tuples of tables which will656 also be considered as dependent on each other.657 658.. seealso::659 660    :func:`.sort_tables_and_constraints`661 662    :attr:`_schema.MetaData.sorted_tables` - uses this function to sort663 664 665Nc�J>�URHnT"U5(dM g gr)�elements)r}�fk�
fixed_skip_fns  �r3�_skip_fn�sort_tables.<locals>._skip_fns$����l�l�� ��$�$��#�r6T)r��extra_dependencies�_warn_for_cycles)rr)rS�skip_fnr�r�rvr|r�s      @r3�sort_tablesr��s`���B���
�	���5���1�!�	666�	�667�I�Q�
�	668�669�	�	��	s�	6�6c670�*^�[5n[5nUbURU5 [5nUH�mTRHrnURSLaUR	U5 M%U(a U"U5nUSLaUR	U5 MLUR671n	U	TLdM_UR	U	T45 Mt URU4SjTR55 M� [[R"URU5U55n672U673Vs/sHnX�RR)U54PM! snS[U54/-$![RGa(nU(aD[R"SSR[!SUR"555<S35 UR$H�nX�;dM674USmTUR";aM!TRVs/sHnUb
U"U5S	LdMUPM Os snfn
nURU
5 U
H)nUR675n	U	TLdMUR'U	T45 M+ M� [[R"URU5U55n676SnAGNtSnAff=fs snf)677aPSort a collection of :class:`_schema.Table`  /678:class:`_schema.ForeignKeyConstraint`679objects.680 681This is a dependency-ordered sort which will emit tuples of682``(Table, [ForeignKeyConstraint, ...])`` such that each683:class:`_schema.Table` follows its dependent :class:`_schema.Table`684objects.685Remaining :class:`_schema.ForeignKeyConstraint`686objects that are separate due to687dependency rules not satisfied by the sort are emitted afterwards688as ``(None, [ForeignKeyConstraint ...])``.689 690Tables are dependent on another based on the presence of691:class:`_schema.ForeignKeyConstraint` objects, explicit dependencies692added by :meth:`_schema.Table.add_is_dependent_on`,693as well as dependencies694stated here using the :paramref:`~.sort_tables_and_constraints.skip_fn`695and/or :paramref:`~.sort_tables_and_constraints.extra_dependencies`696parameters.697 698:param tables: a sequence of :class:`_schema.Table` objects.699 700:param filter_fn: optional callable which will be passed a701 :class:`_schema.ForeignKeyConstraint` object,702 and returns a value based on703 whether this constraint should definitely be included or excluded as704 an inline constraint, or neither.   If it returns False, the constraint705 will definitely be included as a dependency that cannot be subject706 to ALTER; if True, it will **only** be included as an ALTER result at707 the end.   Returning None means the constraint is included in the708 table-based result unless it is detected as part of a dependency cycle.709 710:param extra_dependencies: a sequence of 2-tuples of tables which will711 also be considered as dependent on each other.712 713.. seealso::714 715    :func:`.sort_tables`716 717 718NTc3�*># �UHoT4v� M719 g7fr:rA)�.0�parentrWs  �r3�	<genexpr>�.sort_tables_and_constraints.<locals>.<genexpr>vs����"720�*C��U�O�*C�s�zLCannot correctly sort tables; there are unresolvable cycles between tables "r�c3�8# �UHoRv� M g7fr:)r�)r�rvs  r3r�r��s���#C�721�1�J�J�722�s�z�", which is usually caused by mutually dependent foreign key constraints.  Foreign key constraints involving these tables will not be considered; this warning may raise an error in a future release.rF)ri�update�foreign_key_constraints�	use_alter�add�referred_table�_extra_dependenciesrhr�sort�unionrr�rr�r�r�r�r��discard�723difference)rSr�r�r��fixed_dependencies�mutable_dependencies�remaining_fkcsr}�filtered�dependent_on�candidate_sort�err�edge�724can_removerWs              `r3rrrr0sy���\����5���%��!�!�"4�5��U�N����0�0�C��}�}��$��"�"�3�'���$�S�>���t�#�"�&�&�s�+���-�-�L��5�(�$�(�(�,��)>�?�1� 	�!�!�"725�*/�*C�*C�"726�	727�#�*%728�����"�(�(�)=�>��
�729��P$��#�E�730�-�-�8�8��H�I�#����^�$�	%�&�'�'��A�&�&�731���I�I��9�9�V�#C��732�733�#C�C�D�G�
��I�I�D��+��Q�����734�735�*�� %�<�<��<�� �(�I�c�N�%�,G��<���736��737�%�%�j�1�%�C�#&�#5�#5�L�#�5�0�,�4�4�l�E�5J�K�&������"�(�(�)=�>��
�738���3739��@s>�%/E�&J�J
�%AJ�%J�+H�H�-J�8A740J�J
rX)rSzIterable[TableClause]r�z0Optional[Callable[[ForeignKeyConstraint], bool]]r�z:Optional[typing_Sequence[Tuple[TableClause, TableClause]]]rCzList[Table])NNF)ZrH�741__future__rr0�typingrrrrrr	r742�typing_Sequencerrr
�r�baserrrr�rrrr�util.typingrr�
TYPE_CHECKINGrNrrrrQrrrr r!r"�743selectabler#�engine.baser$�engine.interfacesr%r&r'r(rer)r,rL�744NamedTupler^�DDLRolern�745DDLElementr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr!r$r'r3r?rEr�r�rrrAr6r3�<module>r�s���746#��
�������.��������#����"��	���"�%�'��"�,��"�,��'�(�.�5�+�:�
�e�5��s�!2�3�4��$�]�$�@�H��%�F���%�Pw�5�=�=�*�n�w�t"�747�H�T748�749�T750�n�*�G�C�L��@+�/�#�&�+�#���$�#�D�;�s�#�D�*��3���.O�+�g�&�O�D!�	�'�"�!��~��t�>�t�n7�	�'�"�7�('�[��,�'�%�9�Z�(�%�?�+�g�&�?�&7�	�'�"�7�&�K��-��D&�Y�|�,�&�R)�o�g�.�)�*��w�/�*�*��}�5�*�+��
�6�+�.�?�<�8�.�/�O�L�9�/�751$�M�752$�753�-�754�755�
�756�W=�)�W=�tiA�%�iA�\AE�	
�W�!�W�
=�W��W��
W�vGL�t'r6