]> git.saurik.com Git - apple/xnu.git/commitdiff
xnu-517.3.15.tar.gz mac-os-x-1033 v517.3.15
authorApple <opensource@apple.com>
Thu, 18 Mar 2004 20:33:34 +0000 (20:33 +0000)
committerApple <opensource@apple.com>
Thu, 18 Mar 2004 20:33:34 +0000 (20:33 +0000)
70 files changed:
bsd/conf/MASTER.i386
bsd/conf/MASTER.ppc
bsd/conf/version.minor
bsd/hfs/hfs_vnops.c
bsd/hfs/hfscommon/Misc/VolumeAllocation.c
bsd/kern/kern_aio.c
bsd/kern/kern_descrip.c
bsd/kern/kern_fork.c
bsd/kern/kern_newsysctl.c
bsd/kern/kern_shutdown.c
bsd/kern/netboot.c
bsd/kern/sysctl_init.c
bsd/kern/uipc_mbuf.c
bsd/kern/uipc_socket.c
bsd/net/dlil.c
bsd/net/ether_if_module.c
bsd/net/ether_inet_pr_module.c
bsd/net/if.c
bsd/net/if.h
bsd/net/if_loop.c
bsd/net/if_var.h
bsd/net/if_vlan.c
bsd/net/if_vlan_var.h
bsd/netinet/ip_input.c
bsd/netinet/ip_output.c
bsd/netinet/tcp.h
bsd/nfs/nfs.h
bsd/nfs/nfs_socket.c
bsd/nfs/nfs_subs.c
bsd/nfs/nfs_vfsops.c
bsd/sys/mbuf.h
bsd/sys/proc.h
bsd/sys/socket.h
bsd/sys/sockio.h
bsd/vfs/vfs_cluster.c
bsd/vfs/vfs_syscalls.c
config/Mach.exports
config/System.kext/Info.plist
config/System.kext/PlugIns/AppleNMI.kext/Info.plist
config/System.kext/PlugIns/ApplePlatformFamily.kext/Info.plist
config/System.kext/PlugIns/BSDKernel.kext/Info.plist
config/System.kext/PlugIns/IOKit.kext/Info.plist
config/System.kext/PlugIns/IONVRAMFamily.kext/Info.plist
config/System.kext/PlugIns/IOSystemManagement.kext/Info.plist
config/System.kext/PlugIns/Libkern.kext/Info.plist
config/System.kext/PlugIns/Mach.kext/Info.plist
config/System6.0.exports
iokit/IOKit/IOPMEventSource.h
iokit/Kernel/IOPMPowerStateQueue.h
iokit/Kernel/IOPMrootDomain.cpp
iokit/Kernel/IOPlatformExpert.cpp
iokit/KernelConfigTables.cpp
iokit/conf/version.minor
libkern/conf/version.minor
libsa/conf/version.minor
osfmk/conf/kernelversion.minor
osfmk/conf/version.minor
osfmk/console/panic_image.c.orig [new file with mode: 0644]
osfmk/kdp/kdp_udp.c
osfmk/ppc/chud/chud_cpu_asm.s
osfmk/ppc/chud/chud_spr.h.orig [new file with mode: 0644]
osfmk/ppc/chud/chud_spr.h.rej [new file with mode: 0644]
osfmk/ppc/exception.h
osfmk/ppc/genassym.c
osfmk/ppc/lowmem_vectors.s
osfmk/ppc/machine_routines_asm.s
osfmk/ppc/spec_reg.h
osfmk/ppc/start.s
osfmk/vm/vm_map.c
pexpert/conf/version.minor

index c2ab5b9cf603d4a1563183340fed1084bd15990f..d1fdbe7a74de3c5db9ce88db3d7c61807beb72d4 100644 (file)
@@ -45,9 +45,9 @@
 #  Standard Apple Research Configurations:
 #  -------- ----- -------- ---------------
 #
 #  Standard Apple Research Configurations:
 #  -------- ----- -------- ---------------
 #
-#  RELEASE = [intel pc mach medium event vol pst gdb kernobjc libdriver fixpri simple_clock mdebug kernserv driverkit uxpr kernstack ipc_compat ipc_debug nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 volfs devfs synthfs revfs hfs mrouting ipdivert ipfirewall inet6 ipsec gif tcpdrop_synfin ktrace stf]
+#  RELEASE = [intel pc mach medium event vol pst gdb kernobjc libdriver fixpri simple_clock mdebug kernserv driverkit uxpr kernstack ipc_compat ipc_debug nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 volfs devfs synthfs revfs hfs mrouting ipdivert ipfirewall inet6 ipsec gif tcpdrop_synfin ktrace stf vlan]
 #  PROFILE = [RELEASE profile]
 #  PROFILE = [RELEASE profile]
-#  DEBUG = [intel pc mach medium event vol pst gdb kernobjc libdriver_g fixpri debug simple_clock mdebug kernserv driverkit xpr_debug uxpr kernstack ipc_compat ipc_debug nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 revfs hfs volfs devfs synthfs mach_assert mrouting ipdivert ipfirewall inet6 ipsec gif tcpdrop_synfin ktrace stf]
+#  DEBUG = [intel pc mach medium event vol pst gdb kernobjc libdriver_g fixpri debug simple_clock mdebug kernserv driverkit xpr_debug uxpr kernstack ipc_compat ipc_debug nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 revfs hfs volfs devfs synthfs mach_assert mrouting ipdivert ipfirewall inet6 ipsec gif tcpdrop_synfin ktrace stf vlan]
 #
 ######################################################################
 #
 #
 ######################################################################
 #
index 897190b4f6a2a3cfb5dd9ba06b6887a2e49782f5..8aea2f9d4a054f01f5212a61373e9ce4251a72f8 100644 (file)
 #  Standard Apple Research Configurations:
 #  -------- ----- -------- ---------------
 #
 #  Standard Apple Research Configurations:
 #  -------- ----- -------- ---------------
 #
-#  RELEASE = [ppc mach medium vol pst gdb simple_clock kernstack nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 revfs noprofiling hfs volfs devfs synthfs netat mrouting ipdivert ipfirewall ktrace inet6 ipsec tcpdrop_synfin gif stf]
+#  RELEASE = [ppc mach medium vol pst gdb simple_clock kernstack nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 revfs noprofiling hfs volfs devfs synthfs netat mrouting ipdivert ipfirewall ktrace inet6 ipsec tcpdrop_synfin gif stf vlan]
 #  RELEASE_TRACE = [RELEASE kdebug]
 #  RELEASE_TRACE = [RELEASE kdebug]
-#  PROFILE = [ppc mach medium vol pst gdb simple_clock kernstack nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 revfs profile hfs volfs devfs synthfs netat mrouting ipdivert ipfirewall ktrace inet6 ipsec tcpdrop_synfin gif stf]
-#  DEBUG = [ppc mach medium vol pst gdb debug simple_clock kernstack nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 revfs profiling hfs volfs devfs synthfs netat mrouting mach_assert ipdivert ipfirewall ktrace inet6 ipsec tcpdrop_synfin gif stf]
+#  PROFILE = [ppc mach medium vol pst gdb simple_clock kernstack nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 revfs profile hfs volfs devfs synthfs netat mrouting ipdivert ipfirewall ktrace inet6 ipsec tcpdrop_synfin gif stf vlan]
+#  DEBUG = [ppc mach medium vol pst gdb debug simple_clock kernstack nfsclient nfsserver quota fifo fdesc union ffs cd9660 compat_43 revfs profiling hfs volfs devfs synthfs netat mrouting mach_assert ipdivert ipfirewall ktrace inet6 ipsec tcpdrop_synfin gif stf vlan]
 #  DEBUG_TRACE = [DEBUG kdebug]
 #
 ######################################################################
 #  DEBUG_TRACE = [DEBUG kdebug]
 #
 ######################################################################
index 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f..00750edc07d6415dcc07ae0351e9397b0222b7ba 100644 (file)
@@ -1 +1 @@
-2
+3
index 1c6444b2df4f50e15e36de1327c2d703c94ef309..de96d48274bd3c86f9462c86e06135240468ab06 100644 (file)
@@ -3717,10 +3717,14 @@ exit:
                 * have the ASCII name of the userid.
                 */
                if (VFS_VGET(HFSTOVFS(hfsmp), &parid, &ddvp) == 0) {
                 * have the ASCII name of the userid.
                 */
                if (VFS_VGET(HFSTOVFS(hfsmp), &parid, &ddvp) == 0) {
-                       if (VTOC(ddvp)->c_desc.cd_nameptr &&
-                           (cp->c_uid == strtoul(VTOC(ddvp)->c_desc.cd_nameptr, 0, 0))) {
-                               cp->c_flags |= UF_NODUMP;
-                               cp->c_flag |= C_CHANGE;
+                       if (VTOC(ddvp)->c_desc.cd_nameptr) {
+                               uid_t uid;
+
+                               uid = strtoul(VTOC(ddvp)->c_desc.cd_nameptr, 0, 0);
+                               if (uid == cp->c_uid || uid == cnp->cn_cred->cr_uid) {
+                                       cp->c_flags |= UF_NODUMP;
+                                       cp->c_flag |= C_CHANGE;
+                               }
                        }
                        vput(ddvp);
                }
                        }
                        vput(ddvp);
                }
index 8893ad1b4726d1dd601ac210a8f58774877960e8..747eb994ee6a45d707178b8bb8371dfb53f1a2db 100644 (file)
@@ -1348,6 +1348,15 @@ static OSErr BlockFindContiguous(
        UInt32  blockRef;
        UInt32  wordsPerBlock;
 
        UInt32  blockRef;
        UInt32  wordsPerBlock;
 
+       if (!useMetaZone) {
+               struct hfsmount *hfsmp = VCBTOHFS(vcb);
+
+               
+               if ((hfsmp->hfs_flags & HFS_METADATA_ZONE) &&
+                   (startingBlock <= hfsmp->hfs_metazone_end))
+                       startingBlock = hfsmp->hfs_metazone_end + 1;
+       }
+
        if ((endingBlock - startingBlock) < minBlocks)
        {
                //      The set of blocks we're checking is smaller than the minimum number
        if ((endingBlock - startingBlock) < minBlocks)
        {
                //      The set of blocks we're checking is smaller than the minimum number
@@ -1428,8 +1437,9 @@ static OSErr BlockFindContiguous(
                                 */
                                if (!useMetaZone) {
                                        currentBlock = NextBitmapBlock(vcb, currentBlock);
                                 */
                                if (!useMetaZone) {
                                        currentBlock = NextBitmapBlock(vcb, currentBlock);
-                                       if (currentBlock >= stopBlock)
-                                               break;
+                                       if (currentBlock >= stopBlock) {
+                                               goto LoopExit;
+                                       }
                                }
 
                                err = ReadBitmapBlock(vcb, currentBlock, &buffer, &blockRef);
                                }
 
                                err = ReadBitmapBlock(vcb, currentBlock, &buffer, &blockRef);
@@ -1516,7 +1526,7 @@ FoundUnused:
 
                                        nextBlock = NextBitmapBlock(vcb, currentBlock);
                                        if (nextBlock != currentBlock) {
 
                                        nextBlock = NextBitmapBlock(vcb, currentBlock);
                                        if (nextBlock != currentBlock) {
-                                               break;  /* allocation gap, so stop */
+                                               goto LoopExit;  /* allocation gap, so stop */
                                        }
                                }
 
                                        }
                                }
 
@@ -1585,7 +1595,7 @@ FoundUsed:
                                ++vcb->vcbFreeExtCnt;
                }
        } while (currentBlock < stopBlock);
                                ++vcb->vcbFreeExtCnt;
                }
        } while (currentBlock < stopBlock);
-
+LoopExit:
 
        //      Return the outputs.
        if (foundBlocks < minBlocks)
 
        //      Return the outputs.
        if (foundBlocks < minBlocks)
index 06942bcb4b73e56e2d17e4ac1a2715afcffae709..d95bda7536b66b7a025f94bff2245a5f9966ad5b 100644 (file)
@@ -922,7 +922,7 @@ aio_suspend( struct proc *p, struct aio_suspend_args *uap, int *retval )
                goto ExitThisRoutine;
        }
 
                goto ExitThisRoutine;
        }
 
-       if ( uap->nent < 1 || uap->nent > AIO_LISTIO_MAX ) {
+       if ( uap->nent < 1 || uap->nent > aio_max_requests_per_process ) {
                error = EINVAL;
                goto ExitThisRoutine;
        }
                error = EINVAL;
                goto ExitThisRoutine;
        }
@@ -950,24 +950,29 @@ aio_suspend( struct proc *p, struct aio_suspend_args *uap, int *retval )
                goto ExitThisRoutine;
        }
 
                goto ExitThisRoutine;
        }
 
-       /* check list of aio requests to see if any have completed */
+       /* copyin our aiocb pointers from list */
        for ( i = 0; i < uap->nent; i++ ) {
                struct aiocb    *aiocbp;
        
                /* copyin in aiocb pointer from list */
        for ( i = 0; i < uap->nent; i++ ) {
                struct aiocb    *aiocbp;
        
                /* copyin in aiocb pointer from list */
-               error = copyin( (void *)(uap->aiocblist + i), (aiocbpp + i), sizeof(aiocbp) );
+               error = copyin( (void *)(uap->aiocblist + i), (aiocbpp + i), sizeof(*aiocbpp) );
                if ( error != 0 ) {
                        error = EAGAIN;
                        goto ExitThisRoutine;
                }
                if ( error != 0 ) {
                        error = EAGAIN;
                        goto ExitThisRoutine;
                }
-       
+       } /* for ( ; i < uap->nent; ) */
+
+       /* check list of aio requests to see if any have completed */
+       AIO_LOCK;
+       for ( i = 0; i < uap->nent; i++ ) {
+               struct aiocb    *aiocbp;
+
                /* NULL elements are legal so check for 'em */
                aiocbp = *(aiocbpp + i);
                if ( aiocbp == NULL )
                        continue;
                /* NULL elements are legal so check for 'em */
                aiocbp = *(aiocbpp + i);
                if ( aiocbp == NULL )
                        continue;
-
+       
                /* return immediately if any aio request in the list is done */
                /* return immediately if any aio request in the list is done */
-               AIO_LOCK;
                TAILQ_FOREACH( entryp, &p->aio_doneq, aio_workq_link ) {
                        if ( entryp->uaiocbp == aiocbp ) {
                                *retval = 0;
                TAILQ_FOREACH( entryp, &p->aio_doneq, aio_workq_link ) {
                        if ( entryp->uaiocbp == aiocbp ) {
                                *retval = 0;
@@ -976,7 +981,6 @@ aio_suspend( struct proc *p, struct aio_suspend_args *uap, int *retval )
                                goto ExitThisRoutine;
                        }
                }
                                goto ExitThisRoutine;
                        }
                }
-               AIO_UNLOCK;
        } /* for ( ; i < uap->nent; ) */
 
        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_suspend_sleep)) | DBG_FUNC_NONE,
        } /* for ( ; i < uap->nent; ) */
 
        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_suspend_sleep)) | DBG_FUNC_NONE,
@@ -990,10 +994,13 @@ aio_suspend( struct proc *p, struct aio_suspend_args *uap, int *retval )
         * use tsleep() here in order to avoid getting kernel funnel lock.
         */
        assert_wait( (event_t) &p->AIO_SUSPEND_SLEEP_CHAN, THREAD_ABORTSAFE );
         * use tsleep() here in order to avoid getting kernel funnel lock.
         */
        assert_wait( (event_t) &p->AIO_SUSPEND_SLEEP_CHAN, THREAD_ABORTSAFE );
+       AIO_UNLOCK;
+
        if ( abstime > 0 ) {
                thread_set_timer_deadline( abstime );
        }
        error = thread_block( THREAD_CONTINUE_NULL );
        if ( abstime > 0 ) {
                thread_set_timer_deadline( abstime );
        }
        error = thread_block( THREAD_CONTINUE_NULL );
+
        if ( error == THREAD_AWAKENED ) {
                /* got our wakeup call from aio_work_thread() */
                if ( abstime > 0 ) {
        if ( error == THREAD_AWAKENED ) {
                /* got our wakeup call from aio_work_thread() */
                if ( abstime > 0 ) {
@@ -1173,11 +1180,11 @@ lio_listio( struct proc *p, struct lio_listio_args *uap, int *retval )
                        aio_anchor.lio_sync_workq_count++;
                }
        }
                        aio_anchor.lio_sync_workq_count++;
                }
        }
-       AIO_UNLOCK;
 
 
-       if ( uap->mode == LIO_NOWAIT ) 
+       if ( uap->mode == LIO_NOWAIT ) 
                /* caller does not want to wait so we'll fire off a worker thread and return */
                wakeup_one( &aio_anchor.aio_async_workq );
                /* caller does not want to wait so we'll fire off a worker thread and return */
                wakeup_one( &aio_anchor.aio_async_workq );
+       }
        else {
                aio_workq_entry                 *entryp;
                int                                     error;
        else {
                aio_workq_entry                 *entryp;
                int                                     error;
@@ -1185,7 +1192,6 @@ lio_listio( struct proc *p, struct lio_listio_args *uap, int *retval )
                /* 
                 * mode is LIO_WAIT - handle the IO requests now.
                 */
                /* 
                 * mode is LIO_WAIT - handle the IO requests now.
                 */
-               AIO_LOCK;
                entryp = TAILQ_FIRST( &aio_anchor.lio_sync_workq );
                while ( entryp != NULL ) {
                        if ( p == entryp->procp && group_tag == entryp->group_tag ) {
                entryp = TAILQ_FIRST( &aio_anchor.lio_sync_workq );
                while ( entryp != NULL ) {
                        if ( p == entryp->procp && group_tag == entryp->group_tag ) {
@@ -1230,8 +1236,8 @@ lio_listio( struct proc *p, struct lio_listio_args *uap, int *retval )
                        
                        entryp = TAILQ_NEXT( entryp, aio_workq_link );
         } /* while ( entryp != NULL ) */
                        
                        entryp = TAILQ_NEXT( entryp, aio_workq_link );
         } /* while ( entryp != NULL ) */
-               AIO_UNLOCK;
        } /* uap->mode == LIO_WAIT */
        } /* uap->mode == LIO_WAIT */
+       AIO_UNLOCK;
 
        /* call_result == -1 means we had no trouble queueing up requests */
        if ( call_result == -1 ) {
 
        /* call_result == -1 means we had no trouble queueing up requests */
        if ( call_result == -1 ) {
@@ -1264,6 +1270,7 @@ aio_work_thread( void )
        struct uthread                  *uthread = (struct uthread *)get_bsdthread_info(current_act());
        
        for( ;; ) {
        struct uthread                  *uthread = (struct uthread *)get_bsdthread_info(current_act());
        
        for( ;; ) {
+               AIO_LOCK;
                entryp = aio_get_some_work();
         if ( entryp == NULL ) {
                /* 
                entryp = aio_get_some_work();
         if ( entryp == NULL ) {
                /* 
@@ -1274,6 +1281,7 @@ aio_work_thread( void )
                         * tsleep() here in order to avoid getting kernel funnel lock.
                 */
                        assert_wait( (event_t) &aio_anchor.aio_async_workq, THREAD_UNINT );
                         * tsleep() here in order to avoid getting kernel funnel lock.
                 */
                        assert_wait( (event_t) &aio_anchor.aio_async_workq, THREAD_UNINT );
+                       AIO_UNLOCK; 
                        thread_block( THREAD_CONTINUE_NULL );
                        
                        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_worker_wake)) | DBG_FUNC_NONE,
                        thread_block( THREAD_CONTINUE_NULL );
                        
                        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_worker_wake)) | DBG_FUNC_NONE,
@@ -1286,6 +1294,8 @@ aio_work_thread( void )
                        vm_map_t                oldmap = VM_MAP_NULL;
                        task_t                  oldaiotask = TASK_NULL;
 
                        vm_map_t                oldmap = VM_MAP_NULL;
                        task_t                  oldaiotask = TASK_NULL;
 
+                       AIO_UNLOCK; 
+
                        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_worker_thread)) | DBG_FUNC_START,
                                                  (int)entryp->procp, (int)entryp->uaiocbp, entryp->flags, 0, 0 );
                        
                        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_worker_thread)) | DBG_FUNC_START,
                                                  (int)entryp->procp, (int)entryp->uaiocbp, entryp->flags, 0, 0 );
                        
@@ -1377,6 +1387,7 @@ aio_work_thread( void )
  * aio_get_some_work - get the next async IO request that is ready to be executed.
  * aio_fsync complicates matters a bit since we cannot do the fsync until all async
  * IO requests at the time the aio_fsync call came in have completed.
  * aio_get_some_work - get the next async IO request that is ready to be executed.
  * aio_fsync complicates matters a bit since we cannot do the fsync until all async
  * IO requests at the time the aio_fsync call came in have completed.
+ * NOTE - AIO_LOCK must be held by caller
  */
 
 static aio_workq_entry *
  */
 
 static aio_workq_entry *
@@ -1386,7 +1397,6 @@ aio_get_some_work( void )
        int                                                     skip_count = 0;
        
        /* pop some work off the work queue and add to our active queue */
        int                                                     skip_count = 0;
        
        /* pop some work off the work queue and add to our active queue */
-       AIO_LOCK;
        for ( entryp = TAILQ_FIRST( &aio_anchor.aio_async_workq );
                  entryp != NULL;
                  entryp = TAILQ_NEXT( entryp, aio_workq_link ) ) {
        for ( entryp = TAILQ_FIRST( &aio_anchor.aio_async_workq );
                  entryp != NULL;
                  entryp = TAILQ_NEXT( entryp, aio_workq_link ) ) {
@@ -1411,7 +1421,6 @@ aio_get_some_work( void )
                aio_anchor.aio_active_count++;
                entryp->procp->aio_active_count++;
        }
                aio_anchor.aio_active_count++;
                entryp->procp->aio_active_count++;
        }
-       AIO_UNLOCK;
                
        return( entryp );
        
                
        return( entryp );
        
@@ -1513,13 +1522,12 @@ aio_queue_async_request( struct proc *procp, struct aiocb *aiocbp, int kindOfIO
        TAILQ_INSERT_TAIL( &aio_anchor.aio_async_workq, entryp, aio_workq_link );
        aio_anchor.aio_async_workq_count++;
        
        TAILQ_INSERT_TAIL( &aio_anchor.aio_async_workq, entryp, aio_workq_link );
        aio_anchor.aio_async_workq_count++;
        
-       AIO_UNLOCK;
+       wakeup_one( &aio_anchor.aio_async_workq );
+       AIO_UNLOCK; 
 
        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_work_queued)) | DBG_FUNC_NONE,
                          (int)procp, (int)aiocbp, 0, 0, 0 );
 
        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_work_queued)) | DBG_FUNC_NONE,
                          (int)procp, (int)aiocbp, 0, 0, 0 );
-
-       wakeup_one( &aio_anchor.aio_async_workq );
-
+       
        return( 0 );
        
 error_exit:
        return( 0 );
        
 error_exit:
@@ -1901,15 +1909,15 @@ do_aio_completion( aio_workq_entry *entryp )
                
                AIO_LOCK;
                active_requests = aio_active_requests_for_process( entryp->procp );
                
                AIO_LOCK;
                active_requests = aio_active_requests_for_process( entryp->procp );
-               AIO_UNLOCK;
+               //AIO_UNLOCK;
                if ( active_requests < 1 ) {
                        /* no active aio requests for this process, continue exiting */
                if ( active_requests < 1 ) {
                        /* no active aio requests for this process, continue exiting */
+                       wakeup_one( &entryp->procp->AIO_CLEANUP_SLEEP_CHAN );
 
                        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_completion_cleanup_wake)) | DBG_FUNC_NONE,
                                                  (int)entryp->procp, (int)entryp->uaiocbp, 0, 0, 0 );
 
                        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_completion_cleanup_wake)) | DBG_FUNC_NONE,
                                                  (int)entryp->procp, (int)entryp->uaiocbp, 0, 0, 0 );
-               
-                       wakeup_one( &entryp->procp->AIO_CLEANUP_SLEEP_CHAN );
                }
                }
+               AIO_UNLOCK;
                return;
        }
 
                return;
        }
 
@@ -1923,10 +1931,12 @@ do_aio_completion( aio_workq_entry *entryp )
         * call wakeup for them.  If we do mark them we should unmark them after
         * the aio_suspend wakes up.
         */
         * call wakeup for them.  If we do mark them we should unmark them after
         * the aio_suspend wakes up.
         */
+       AIO_LOCK; 
+       wakeup_one( &entryp->procp->AIO_SUSPEND_SLEEP_CHAN ); 
+       AIO_UNLOCK;
+
        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_completion_suspend_wake)) | DBG_FUNC_NONE,
                                  (int)entryp->procp, (int)entryp->uaiocbp, 0, 0, 0 );
        KERNEL_DEBUG( (BSDDBG_CODE(DBG_BSD_AIO, AIO_completion_suspend_wake)) | DBG_FUNC_NONE,
                                  (int)entryp->procp, (int)entryp->uaiocbp, 0, 0, 0 );
-               
-       wakeup_one( &entryp->procp->AIO_SUSPEND_SLEEP_CHAN ); 
        
        return;
        
        
        return;
        
index 1f6089b4acb0878bc312b57ba39ebe28df2048af..c8afda2d4870ebcb6a5a261d3c350cac90659f5f 100644 (file)
@@ -600,9 +600,16 @@ fcntl(p, uap, retval)
 
                len = MAXPATHLEN;
                MALLOC(pathbuf, char *, len, M_TEMP, M_WAITOK);
 
                len = MAXPATHLEN;
                MALLOC(pathbuf, char *, len, M_TEMP, M_WAITOK);
+
+               error = vn_lock(vp, LK_EXCLUSIVE|LK_RETRY, p);
+               if (error) {
+                   FREE(pathbuf, M_TEMP);
+                   return (error);
+               }
                error = vn_getpath(vp, pathbuf, &len);
                if (error == 0)
                        error = copyout((caddr_t)pathbuf, (caddr_t)uap->arg, len);
                error = vn_getpath(vp, pathbuf, &len);
                if (error == 0)
                        error = copyout((caddr_t)pathbuf, (caddr_t)uap->arg, len);
+               VOP_UNLOCK(vp, 0, p);
                FREE(pathbuf, M_TEMP);
                return error;
        }
                FREE(pathbuf, M_TEMP);
                return error;
        }
@@ -612,7 +619,13 @@ fcntl(p, uap, retval)
                        return (EBADF);
                vp = (struct vnode *)fp->f_data;
 
                        return (EBADF);
                vp = (struct vnode *)fp->f_data;
 
-               return (VOP_IOCTL(vp, 6, (caddr_t)NULL, 0, fp->f_cred, p));
+               error = vn_lock(vp, LK_EXCLUSIVE|LK_RETRY, p);
+               if (error) {
+                   return (error);
+               }
+               error = VOP_IOCTL(vp, 6, (caddr_t)NULL, 0, fp->f_cred, p);
+               VOP_UNLOCK(vp, 0, p);
+               return error;
        }
            
        default:
        }
            
        default:
@@ -1216,6 +1229,12 @@ fdfree(p)
                FREE(fdp->fd_knhash, M_KQUEUE);
 
        FREE_ZONE(fdp, sizeof *fdp, M_FILEDESC);
                FREE(fdp->fd_knhash, M_KQUEUE);
 
        FREE_ZONE(fdp, sizeof *fdp, M_FILEDESC);
+
+       // XXXdbg
+       { 
+           void clean_up_fmod_watch(struct proc *p);
+           clean_up_fmod_watch(p);
+       }
 }
 
 static int
 }
 
 static int
index ba5682953454d3cdbadcdf84d7d5c51871602425..4ec50d27a95cf75f536fbda47fbd1ee770a48b46 100644 (file)
@@ -459,6 +459,7 @@ again:
        p2->p_stat = SIDL;
        p2->p_pid = nextpid;
 
        p2->p_stat = SIDL;
        p2->p_pid = nextpid;
 
+       p2->p_shutdownstate = 0;
        /*
         * Make a proc table entry for the new process.
         * Start by zeroing the section of proc that is zero-initialized,
        /*
         * Make a proc table entry for the new process.
         * Start by zeroing the section of proc that is zero-initialized,
index 002a77df4e795054a1987f039f6e2f398136e5be..730e55f86ffc6039c1cc58870dc862dbc01c5b87 100644 (file)
@@ -522,7 +522,7 @@ sysctl_sysctl_name2oid SYSCTL_HANDLER_ARGS
        return (error);
 }
 
        return (error);
 }
 
-SYSCTL_PROC(_sysctl, 3, name2oid, CTLFLAG_RW|CTLFLAG_ANYBODY, 0, 0, 
+SYSCTL_PROC(_sysctl, 3, name2oid, CTLFLAG_RW|CTLFLAG_ANYBODY|CTLFLAG_KERN, 0, 0, 
        sysctl_sysctl_name2oid, "I", "");
 
 static int
        sysctl_sysctl_name2oid, "I", "");
 
 static int
index 19f68507d8af230b7473726e0dfd93b4751418a2..b4d4396092eb4f4e80d56aa3476635a1ea1318b0 100644 (file)
@@ -182,10 +182,15 @@ proc_shutdown()
        /*
         * send SIGTERM to those procs interested in catching one
         */
        /*
         * send SIGTERM to those procs interested in catching one
         */
+sigterm_loop:
        for (p = allproc.lh_first; p; p = p->p_list.le_next) {
        for (p = allproc.lh_first; p; p = p->p_list.le_next) {
-               if (((p->p_flag&P_SYSTEM) == 0) && (p->p_pptr->p_pid != 0) && (p != self)) {
-                       if (p->p_sigcatch & sigmask(SIGTERM))
+               if (((p->p_flag&P_SYSTEM) == 0) && (p->p_pptr->p_pid != 0) && (p != self) && (p->p_shutdownstate == 0)) {
+                       if (p->p_sigcatch & sigmask(SIGTERM)) {
+                               p->p_shutdownstate = 1;
                                psignal(p, SIGTERM);
                                psignal(p, SIGTERM);
+
+                               goto sigterm_loop;
+                       }
                }
        }
        /*
                }
        }
        /*
@@ -203,10 +208,8 @@ proc_shutdown()
                TERM_catch = 0;
 
                for (p = allproc.lh_first; p; p = p->p_list.le_next) {
                TERM_catch = 0;
 
                for (p = allproc.lh_first; p; p = p->p_list.le_next) {
-                       if (((p->p_flag&P_SYSTEM) == 0) && (p->p_pptr->p_pid != 0) && (p != self)) {
-                               if (p->p_sigcatch & sigmask(SIGTERM))
-                                       TERM_catch++;
-                       }
+                       if (p->p_shutdownstate == 1)
+                               TERM_catch++;
                }
                if (TERM_catch == 0)
                        break;
                }
                if (TERM_catch == 0)
                        break;
@@ -215,12 +218,9 @@ proc_shutdown()
                /*
                 * log the names of the unresponsive tasks
                 */
                /*
                 * log the names of the unresponsive tasks
                 */
-
                for (p = allproc.lh_first; p; p = p->p_list.le_next) {
                for (p = allproc.lh_first; p; p = p->p_list.le_next) {
-                       if (((p->p_flag&P_SYSTEM) == 0) && (p->p_pptr->p_pid != 0) && (p != self)) {
-                               if (p->p_sigcatch & sigmask(SIGTERM))
+                       if (p->p_shutdownstate == 1)
                                  printf("%s[%d]: didn't act on SIGTERM\n", p->p_comm, p->p_pid);
                                  printf("%s[%d]: didn't act on SIGTERM\n", p->p_comm, p->p_pid);
-                       }
                }
                IOSleep(1000 * 5);
        }
                }
                IOSleep(1000 * 5);
        }
@@ -228,9 +228,14 @@ proc_shutdown()
        /*
         * send a SIGKILL to all the procs still hanging around
         */
        /*
         * send a SIGKILL to all the procs still hanging around
         */
+sigkill_loop:
        for (p = allproc.lh_first; p; p = p->p_list.le_next) {
        for (p = allproc.lh_first; p; p = p->p_list.le_next) {
-               if (((p->p_flag&P_SYSTEM) == 0) && (p->p_pptr->p_pid != 0) && (p != self))
+               if (((p->p_flag&P_SYSTEM) == 0) && (p->p_pptr->p_pid != 0) && (p != self) && (p->p_shutdownstate != 2)) {
                        psignal(p, SIGKILL);
                        psignal(p, SIGKILL);
+                       p->p_shutdownstate = 2;
+                       
+                       goto sigkill_loop;
+               }
        }
        /*
         * wait for up to 60 seconds to allow these procs to exit normally
        }
        /*
         * wait for up to 60 seconds to allow these procs to exit normally
@@ -239,7 +244,7 @@ proc_shutdown()
                IOSleep(200);  /* double the time from 100 to 200 for NFS requests in particular */
 
                for (p = allproc.lh_first; p; p = p->p_list.le_next) {
                IOSleep(200);  /* double the time from 100 to 200 for NFS requests in particular */
 
                for (p = allproc.lh_first; p; p = p->p_list.le_next) {
-                       if (((p->p_flag&P_SYSTEM) == 0) && (p->p_pptr->p_pid != 0) && (p != self))
+                       if (p->p_shutdownstate == 2)
                                break;
                }
                if (!p)
                                break;
                }
                if (!p)
@@ -278,18 +283,19 @@ proc_shutdown()
        /*
         *      Forcibly free resources of what's left.
         */
        /*
         *      Forcibly free resources of what's left.
         */
+#ifdef notyet
        p = allproc.lh_first;
        while (p) {
        /*
         * Close open files and release open-file table.
         * This may block!
         */
        p = allproc.lh_first;
        while (p) {
        /*
         * Close open files and release open-file table.
         * This may block!
         */
-#ifdef notyet
+
        /* panics on reboot due to "zfree: non-allocated memory in collectable zone" message */
        fdfree(p);
        /* panics on reboot due to "zfree: non-allocated memory in collectable zone" message */
        fdfree(p);
-#endif /* notyet */
        p = p->p_list.le_next;
        }
        p = p->p_list.le_next;
        }
+#endif /* notyet */
        /* Wait for the reaper thread to run, and clean up what we have done 
         * before we proceed with the hardcore shutdown. This reduces the race
         * between kill_tasks and the reaper thread.
        /* Wait for the reaper thread to run, and clean up what we have done 
         * before we proceed with the hardcore shutdown. This reduces the race
         * between kill_tasks and the reaper thread.
index 9e5c6617006b024d382e8b0dc805b29f4fdf6799..7ef670a071db8c0b8e90817502b440c5adbfecf9 100644 (file)
@@ -40,6 +40,7 @@
 #include <sys/vnode.h>
 #include <sys/malloc.h>
 #include <sys/socket.h>
 #include <sys/vnode.h>
 #include <sys/malloc.h>
 #include <sys/socket.h>
+#include <sys/socketvar.h>
 #include <sys/reboot.h>
 #include <net/if.h>
 #include <net/if_dl.h>
 #include <sys/reboot.h>
 #include <net/if.h>
 #include <net/if_dl.h>
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
 #include <netinet/dhcp_options.h>
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
 #include <netinet/dhcp_options.h>
-
+#include <kern/kalloc.h>
+#include <pexpert/pexpert.h>
 
 //#include <libkern/libkern.h>
 
 //#include <libkern/libkern.h>
-
-extern dev_t           rootdev;                /* device of the root */
 extern struct filedesc         filedesc0;
 
 extern struct filedesc         filedesc0;
 
+extern int     strncmp(const char *,const char *, size_t);
+extern unsigned long strtoul(const char *, char **, int);
 extern char *  strchr(const char *str, int ch);
 
 extern char *  strchr(const char *str, int ch);
 
-extern int     nfs_mountroot();        /* nfs_vfsops.c */
+extern int     nfs_mountroot(void);    /* nfs_vfsops.c */
 extern int (*mountroot)(void);
 
 extern unsigned char   rootdevice[];
 extern int (*mountroot)(void);
 
 extern unsigned char   rootdevice[];
@@ -66,24 +68,19 @@ static int                  S_netboot = 0;
 static struct netboot_info *   S_netboot_info_p;
 
 void *
 static struct netboot_info *   S_netboot_info_p;
 
 void *
-IOBSDRegistryEntryForDeviceTree(char * path);
+IOBSDRegistryEntryForDeviceTree(const char * path);
 
 void
 IOBSDRegistryEntryRelease(void * entry);
 
 const void *
 
 void
 IOBSDRegistryEntryRelease(void * entry);
 
 const void *
-IOBSDRegistryEntryGetData(void * entry, char * property_name, 
+IOBSDRegistryEntryGetData(void * entry, const char * property_name, 
                          int * packet_length);
 
 extern int vndevice_root_image(const char * path, char devname[], 
                               dev_t * dev_p);
 extern int di_root_image(const char *path, char devname[], dev_t *dev_p);
 
                          int * packet_length);
 
 extern int vndevice_root_image(const char * path, char devname[], 
                               dev_t * dev_p);
 extern int di_root_image(const char *path, char devname[], dev_t *dev_p);
 
-
-static boolean_t path_getfile __P((char * image_path, 
-                                  struct sockaddr_in * sin_p, 
-                                  char * serv_name, char * pathname));
-
 #define BOOTP_RESPONSE "bootp-response"
 #define BSDP_RESPONSE  "bsdp-response"
 #define DHCP_RESPONSE  "dhcp-response"
 #define BOOTP_RESPONSE "bootp-response"
 #define BSDP_RESPONSE  "bsdp-response"
 #define DHCP_RESPONSE  "dhcp-response"
@@ -93,6 +90,20 @@ bootp(struct ifnet * ifp, struct in_addr * iaddr_p, int max_retry,
       struct in_addr * netmask_p, struct in_addr * router_p,
       struct proc * procp);
 
       struct in_addr * netmask_p, struct in_addr * router_p,
       struct proc * procp);
 
+
+/* forward declarations */
+int    inet_aton(char * cp, struct in_addr * pin);
+
+boolean_t      netboot_iaddr(struct in_addr * iaddr_p);
+boolean_t      netboot_rootpath(struct in_addr * server_ip,
+                                char * name, int name_len, 
+                                char * path, int path_len);
+int    netboot_setup(struct proc * p);
+int    netboot_mountroot(void);
+int    netboot_root(void);
+
+
+
 #define IP_FORMAT      "%d.%d.%d.%d"
 #define IP_CH(ip)      ((u_char *)ip)
 #define IP_LIST(ip)    IP_CH(ip)[0],IP_CH(ip)[1],IP_CH(ip)[2],IP_CH(ip)[3]
 #define IP_FORMAT      "%d.%d.%d.%d"
 #define IP_CH(ip)      ((u_char *)ip)
 #define IP_LIST(ip)    IP_CH(ip)[0],IP_CH(ip)[1],IP_CH(ip)[2],IP_CH(ip)[3]
@@ -304,13 +315,13 @@ get_root_path(char * root_path)
        return (FALSE);
     }
     pkt = IOBSDRegistryEntryGetData(entry, BSDP_RESPONSE, &pkt_len);
        return (FALSE);
     }
     pkt = IOBSDRegistryEntryGetData(entry, BSDP_RESPONSE, &pkt_len);
-    if (pkt != NULL && pkt_len >= sizeof(struct dhcp)) {
+    if (pkt != NULL && pkt_len >= (int)sizeof(struct dhcp)) {
        printf("netboot: retrieving root path from BSDP response\n");
     }
     else {
        pkt = IOBSDRegistryEntryGetData(entry, BOOTP_RESPONSE, 
                                        &pkt_len);
        printf("netboot: retrieving root path from BSDP response\n");
     }
     else {
        pkt = IOBSDRegistryEntryGetData(entry, BOOTP_RESPONSE, 
                                        &pkt_len);
-       if (pkt != NULL && pkt_len >= sizeof(struct dhcp)) {
+       if (pkt != NULL && pkt_len >= (int)sizeof(struct dhcp)) {
            printf("netboot: retrieving root path from BOOTP response\n");
        }
     }
            printf("netboot: retrieving root path from BOOTP response\n");
        }
     }
@@ -380,7 +391,7 @@ netboot_info_init(struct in_addr iaddr)
            printf("Server %s Mount %s", 
                   server_name, info->mount_point);
            if (image_path != NULL) {
            printf("Server %s Mount %s", 
                   server_name, info->mount_point);
            if (image_path != NULL) {
-               boolean_t       needs_slash;
+               boolean_t       needs_slash = FALSE;
 
                info->image_path_length = strlen(image_path) + 1;
                if (image_path[0] != '/') {
 
                info->image_path_length = strlen(image_path) + 1;
                if (image_path[0] != '/') {
@@ -423,15 +434,15 @@ netboot_info_free(struct netboot_info * * info_p)
 
     if (info) {
        if (info->mount_point) {
 
     if (info) {
        if (info->mount_point) {
-           kfree(info->mount_point, info->mount_point_length);
+           kfree((vm_offset_t)info->mount_point, info->mount_point_length);
        }
        if (info->server_name) {
        }
        if (info->server_name) {
-           kfree(info->server_name, info->server_name_length);
+           kfree((vm_offset_t)info->server_name, info->server_name_length);
        }
        if (info->image_path) {
        }
        if (info->image_path) {
-           kfree(info->image_path, info->image_path_length);
+           kfree((vm_offset_t)info->image_path, info->image_path_length);
        }
        }
-       kfree(info, sizeof(*info));
+       kfree((vm_offset_t)info, sizeof(*info));
     }
     *info_p = NULL;
     return;
     }
     *info_p = NULL;
     return;
@@ -487,12 +498,12 @@ get_ip_parameters(struct in_addr * iaddr_p, struct in_addr * netmask_p,
        return (FALSE);
     }
     pkt = IOBSDRegistryEntryGetData(entry, DHCP_RESPONSE, &pkt_len);
        return (FALSE);
     }
     pkt = IOBSDRegistryEntryGetData(entry, DHCP_RESPONSE, &pkt_len);
-    if (pkt != NULL && pkt_len >= sizeof(struct dhcp)) {
+    if (pkt != NULL && pkt_len >= (int)sizeof(struct dhcp)) {
        printf("netboot: retrieving IP information from DHCP response\n");
     }
     else {
        pkt = IOBSDRegistryEntryGetData(entry, BOOTP_RESPONSE, &pkt_len);
        printf("netboot: retrieving IP information from DHCP response\n");
     }
     else {
        pkt = IOBSDRegistryEntryGetData(entry, BOOTP_RESPONSE, &pkt_len);
-       if (pkt != NULL && pkt_len >= sizeof(struct dhcp)) {
+       if (pkt != NULL && pkt_len >= (int)sizeof(struct dhcp)) {
            printf("netboot: retrieving IP information from BOOTP response\n");
        }
     }
            printf("netboot: retrieving IP information from BOOTP response\n");
        }
     }
@@ -526,9 +537,13 @@ inet_aifaddr(struct socket * so, char * name, const struct in_addr * addr,
             const struct in_addr * mask,
             const struct in_addr * broadcast)
 {
             const struct in_addr * mask,
             const struct in_addr * broadcast)
 {
-    struct sockaddr    blank_sin = { sizeof(blank_sin), AF_INET };
+    struct sockaddr    blank_sin;
     struct ifaliasreq  ifra;
 
     struct ifaliasreq  ifra;
 
+    bzero(&blank_sin, sizeof(blank_sin));
+    blank_sin.sa_len = sizeof(blank_sin);
+    blank_sin.sa_family = AF_INET;
+
     bzero(&ifra, sizeof(ifra));
     strncpy(ifra.ifra_name, name, sizeof(ifra.ifra_name));
     if (addr) {
     bzero(&ifra, sizeof(ifra));
     strncpy(ifra.ifra_name, name, sizeof(ifra.ifra_name));
     if (addr) {
@@ -547,42 +562,60 @@ inet_aifaddr(struct socket * so, char * name, const struct in_addr * addr,
 }
 
 static int
 }
 
 static int
-default_route_add(struct in_addr router, boolean_t proxy_arp)
+route_cmd(int cmd, struct in_addr d, struct in_addr g, 
+         struct in_addr m, u_long more_flags)
 {
     struct sockaddr_in                 dst;
     u_long                     flags = RTF_UP | RTF_STATIC;
     struct sockaddr_in         gw;
     struct sockaddr_in         mask;
     
 {
     struct sockaddr_in                 dst;
     u_long                     flags = RTF_UP | RTF_STATIC;
     struct sockaddr_in         gw;
     struct sockaddr_in         mask;
     
-    if (proxy_arp == FALSE) {
-       flags |= RTF_GATEWAY;
-    }
+    flags |= more_flags;
 
 
-    /* dest 0.0.0.0 */
+    /* destination */
     bzero((caddr_t)&dst, sizeof(dst));
     dst.sin_len = sizeof(dst);
     dst.sin_family = AF_INET;
     bzero((caddr_t)&dst, sizeof(dst));
     dst.sin_len = sizeof(dst);
     dst.sin_family = AF_INET;
+    dst.sin_addr = d;
 
     /* gateway */
     bzero((caddr_t)&gw, sizeof(gw));
     gw.sin_len = sizeof(gw);
     gw.sin_family = AF_INET;
 
     /* gateway */
     bzero((caddr_t)&gw, sizeof(gw));
     gw.sin_len = sizeof(gw);
     gw.sin_family = AF_INET;
-    gw.sin_addr = router;
+    gw.sin_addr = g;
 
 
-    /* mask 0.0.0.0 */
+    /* mask */
     bzero(&mask, sizeof(mask));
     mask.sin_len = sizeof(mask);
     mask.sin_family = AF_INET;
     bzero(&mask, sizeof(mask));
     mask.sin_len = sizeof(mask);
     mask.sin_family = AF_INET;
+    mask.sin_addr = m;
 
 
-    printf("netboot: adding default route " IP_FORMAT "\n", 
-          IP_LIST(&router));
-
-    return (rtrequest(RTM_ADD, (struct sockaddr *)&dst, (struct sockaddr *)&gw,
+    return (rtrequest(cmd, (struct sockaddr *)&dst, (struct sockaddr *)&gw,
                      (struct sockaddr *)&mask, flags, NULL));
 }
 
                      (struct sockaddr *)&mask, flags, NULL));
 }
 
+static int
+default_route_add(struct in_addr router, boolean_t proxy_arp)
+{
+    u_long                     flags = 0;
+    struct in_addr             zeroes = { 0 };
+    
+    if (proxy_arp == FALSE) {
+       flags |= RTF_GATEWAY;
+    }
+    return (route_cmd(RTM_ADD, zeroes, router, zeroes, flags));
+}
+
+static int
+host_route_delete(struct in_addr host)
+{
+    struct in_addr             zeroes = { 0 };
+    
+    return (route_cmd(RTM_DELETE, host, zeroes, zeroes, RTF_HOST));
+}
+
 static struct ifnet *
 static struct ifnet *
-find_interface()
+find_interface(void)
 {
     struct ifnet *             ifp = NULL;
 
 {
     struct ifnet *             ifp = NULL;
 
@@ -599,7 +632,7 @@ find_interface()
 }
 
 int
 }
 
 int
-netboot_mountroot()
+netboot_mountroot(void)
 {
     int                        error = 0;
     struct in_addr             iaddr = { 0 };
 {
     int                        error = 0;
     struct in_addr             iaddr = { 0 };
@@ -609,6 +642,7 @@ netboot_mountroot()
     struct proc *              procp = current_proc();
     struct in_addr             router = { 0 };
     struct socket *            so = NULL;
     struct proc *              procp = current_proc();
     struct in_addr             router = { 0 };
     struct socket *            so = NULL;
+    unsigned int               try;
 
     bzero(&ifr, sizeof(ifr));
 
 
     bzero(&ifr, sizeof(ifr));
 
@@ -662,6 +696,8 @@ netboot_mountroot()
        /* enable proxy arp if we don't have a router */
        router.s_addr = iaddr.s_addr;
     }
        /* enable proxy arp if we don't have a router */
        router.s_addr = iaddr.s_addr;
     }
+    printf("netboot: adding default route " IP_FORMAT "\n", 
+          IP_LIST(&router));
     error = default_route_add(router, router.s_addr == iaddr.s_addr);
     if (error) {
        printf("netboot: default_route_add failed %d\n", error);
     error = default_route_add(router, router.s_addr == iaddr.s_addr);
     if (error) {
        printf("netboot: default_route_add failed %d\n", error);
@@ -674,7 +710,43 @@ netboot_mountroot()
     switch (S_netboot_info_p->image_type) {
     default:
     case kNetBootImageTypeNFS:
     switch (S_netboot_info_p->image_type) {
     default:
     case kNetBootImageTypeNFS:
-       error = nfs_mountroot();
+       for (try = 1; TRUE; try++) {
+           error = nfs_mountroot();
+           if (error == 0) {
+               break;
+           }
+           printf("netboot: nfs_mountroot() attempt %u failed; "
+                  "clearing ARP entry and trying again\n", try);
+           /* 
+            * error is either EHOSTDOWN or EHOSTUNREACH, which likely means
+            * that the port we're plugged into has spanning tree enabled,
+            * and either the router or the server can't answer our ARP
+            * requests.  Clear the incomplete ARP entry by removing the
+            * appropriate route, depending on the error code:
+            *     EHOSTDOWN            NFS server's route
+            *     EHOSTUNREACH         router's route
+            */
+           switch (error) {
+           default:
+               /* NOT REACHED */
+           case EHOSTDOWN:
+               /* remove the server's arp entry */
+               error = host_route_delete(S_netboot_info_p->server_ip);
+               if (error) {
+                   printf("netboot: host_route_delete(" IP_FORMAT
+                          ") failed %d\n", 
+                          IP_LIST(&S_netboot_info_p->server_ip), error);
+               }
+               break;
+           case EHOSTUNREACH:
+               error = host_route_delete(router);
+               if (error) {
+                   printf("netboot: host_route_delete(" IP_FORMAT
+                          ") failed %d\n", IP_LIST(&router), error);
+               }
+               break;
+           }
+       }
        break;
     case kNetBootImageTypeHTTP:
        error = netboot_setup(procp);
        break;
     case kNetBootImageTypeHTTP:
        error = netboot_setup(procp);
@@ -751,7 +823,7 @@ netboot_setup(struct proc * p)
 }
 
 int
 }
 
 int
-netboot_root()
+netboot_root(void)
 {
     return (S_netboot);
 }
 {
     return (S_netboot);
 }
index 55a510fff3c8cd82cf40302e923e77a47d8c71f7..8b2dc4e92bee4560e622bfa6787bb65d31c94ca3 100644 (file)
@@ -619,11 +619,13 @@ struct sysctl_oid *newsysctl_list[] =
     ,&sysctl__net_link_generic_system
 #endif
 
     ,&sysctl__net_link_generic_system
 #endif
 
+#if 0
 #if VLAN
     ,&sysctl__net_link_vlan_link_proto
     ,&sysctl__net_link_vlan
     ,&sysctl__net_link_vlan_link
 #endif
 #if VLAN
     ,&sysctl__net_link_vlan_link_proto
     ,&sysctl__net_link_vlan
     ,&sysctl__net_link_vlan_link
 #endif
+#endif 0
 
     ,&sysctl__net_local_inflight
     ,&sysctl__net_local_dgram_maxdgram
 
     ,&sysctl__net_local_inflight
     ,&sysctl__net_local_dgram_maxdgram
index b539543f2ec9c0dbe91baeceb5edc30f5e996cf4..49ec4875fd75cd4247a2d5ae8e12abe82dcfe36c 100644 (file)
@@ -92,7 +92,8 @@
                                                                        (mbuf_ptr)->m_pkthdr.csum_flags = 0; \
                                                                        (mbuf_ptr)->m_pkthdr.csum_data = 0; \
                                                                        (mbuf_ptr)->m_pkthdr.aux = (struct mbuf*)NULL; \
                                                                        (mbuf_ptr)->m_pkthdr.csum_flags = 0; \
                                                                        (mbuf_ptr)->m_pkthdr.csum_data = 0; \
                                                                        (mbuf_ptr)->m_pkthdr.aux = (struct mbuf*)NULL; \
-                                                                       (mbuf_ptr)->m_pkthdr.reserved1 = NULL; \
+                                                                       (mbuf_ptr)->m_pkthdr.reserved_1 = 0; \
+                                                                       (mbuf_ptr)->m_pkthdr.vlan_tag = 0; \
                                                                        (mbuf_ptr)->m_pkthdr.reserved2 = NULL;
 
 extern pmap_t kernel_pmap;    /* The kernel's pmap */
                                                                        (mbuf_ptr)->m_pkthdr.reserved2 = NULL;
 
 extern pmap_t kernel_pmap;    /* The kernel's pmap */
@@ -1693,7 +1694,8 @@ m_dup(register struct mbuf *m, int how)
                                 n->m_pkthdr.csum_flags = 0;
                                 n->m_pkthdr.csum_data = 0;
                                 n->m_pkthdr.aux = NULL;
                                 n->m_pkthdr.csum_flags = 0;
                                 n->m_pkthdr.csum_data = 0;
                                 n->m_pkthdr.aux = NULL;
-                                n->m_pkthdr.reserved1 = 0;
+                                n->m_pkthdr.vlan_tag = 0;
+                                n->m_pkthdr.reserved_1 = 0;
                                 n->m_pkthdr.reserved2 = 0;
                                 bcopy(m->m_data, n->m_data, m->m_pkthdr.len);
                                return(n);
                                 n->m_pkthdr.reserved2 = 0;
                                 bcopy(m->m_data, n->m_data, m->m_pkthdr.len);
                                return(n);
index 21595dab896f6b543e87bdf98cabd2844c77fd1f..243cf880b04362cfa9f207c2109c62759f4c6326 100644 (file)
@@ -1424,9 +1424,14 @@ dontblock:
        if ((pr->pr_flags & PR_ADDR) && m->m_type == MT_SONAME) {
                KASSERT(m->m_type == MT_SONAME, ("receive 1a"));
                orig_resid = 0;
        if ((pr->pr_flags & PR_ADDR) && m->m_type == MT_SONAME) {
                KASSERT(m->m_type == MT_SONAME, ("receive 1a"));
                orig_resid = 0;
-               if (psa)
+               if (psa) {
                        *psa = dup_sockaddr(mtod(m, struct sockaddr *),
                                            mp0 == 0);
                        *psa = dup_sockaddr(mtod(m, struct sockaddr *),
                                            mp0 == 0);
+                       if ((*psa == 0) && (flags & MSG_NEEDSA)) {
+                               error = EWOULDBLOCK;
+                               goto release;
+                       }
+               }
                if (flags & MSG_PEEK) {
                        m = m->m_next;
                } else {
                if (flags & MSG_PEEK) {
                        m = m->m_next;
                } else {
index 1b7d0db4e9f99f0de2b462504fd95860b4adf197..fcdf70f3adf288dce9ec06fcee1a5dd47b8d09ba 100644 (file)
@@ -1037,10 +1037,8 @@ dlil_ioctl(u_long        proto_fam,
 
 
      if (proto_fam) {
 
 
      if (proto_fam) {
-         retval = dlil_find_dltag(ifp->if_family, ifp->if_unit,
-                                  proto_fam, &dl_tag);
-
-         if (retval == 0) {
+         if (dlil_find_dltag(ifp->if_family, ifp->if_unit,
+                             proto_fam, &dl_tag) == 0) {
               if (dl_tag_array[dl_tag].ifp != ifp)
                    return ENOENT;
        
               if (dl_tag_array[dl_tag].ifp != ifp)
                    return ENOENT;
        
@@ -1073,8 +1071,6 @@ dlil_ioctl(u_long proto_fam,
               else
                    retval = EOPNOTSUPP;
          }
               else
                    retval = EOPNOTSUPP;
          }
-         else
-              retval = 0;
      }
 
      if ((retval) && (retval != EOPNOTSUPP)) {
      }
 
      if ((retval) && (retval != EOPNOTSUPP)) {
index 0ce4f172711dbcd2226542a3d61e6616b25bc26f..126f377dbf7937a67085fb3683cc8be2734ea822 100644 (file)
 */
 
 #include <sys/socketvar.h>
 */
 
 #include <sys/socketvar.h>
+#include <net/if_vlan_var.h>
 
 #include <net/dlil.h>
 
 
 #include <net/dlil.h>
 
+extern int  vlan_demux(struct ifnet * ifp, struct mbuf *, 
+                      char * frame_header, struct if_proto * * proto);
 
 #if LLC && CCITT
 extern struct ifqueue pkintrq;
 
 #if LLC && CCITT
 extern struct ifqueue pkintrq;
@@ -107,11 +110,6 @@ extern struct ifqueue atalkintrq;
 #include <net/bridge.h>
 #endif
 
 #include <net/bridge.h>
 #endif
 
-/* #include "vlan.h" */
-#if NVLAN > 0
-#include <net/if_vlan_var.h>
-#endif /* NVLAN > 0 */
-
 static u_long lo_dlt = 0;
 
 #define IFP2AC(IFP) ((struct arpcom *)IFP)
 static u_long lo_dlt = 0;
 
 #define IFP2AC(IFP) ((struct arpcom *)IFP)
@@ -148,8 +146,8 @@ int ether_resolvemulti __P((struct ifnet *, struct sockaddr **,
  * Setting the type to 0 releases the entry. Eventually we should compact-out
  * the unused entries.
  */
  * Setting the type to 0 releases the entry. Eventually we should compact-out
  * the unused entries.
  */
-static
-int  ether_del_proto(struct if_proto *proto, u_long dl_tag)
+__private_extern__ int
+ether_del_proto(struct if_proto *proto, u_long dl_tag)
 {
     struct en_desc*    ed = ether_desc_blk[proto->ifp->family_cookie].block_ptr;
     u_long     current = 0;
 {
     struct en_desc*    ed = ether_desc_blk[proto->ifp->family_cookie].block_ptr;
     u_long     current = 0;
@@ -172,7 +170,8 @@ int  ether_del_proto(struct if_proto *proto, u_long dl_tag)
 
 
 
 
 
 
-static int
+
+__private_extern__ int
 ether_add_proto(struct ddesc_head_str *desc_head, struct if_proto *proto, u_long dl_tag)
 {
    char *current_ptr;
 ether_add_proto(struct ddesc_head_str *desc_head, struct if_proto *proto, u_long dl_tag)
 {
    char *current_ptr;
@@ -220,7 +219,6 @@ ether_add_proto(struct ddesc_head_str *desc_head, struct if_proto *proto, u_long
                 return EINVAL;
         }
     
                 return EINVAL;
         }
     
-    restart:
         ed = ether_desc_blk[proto->ifp->family_cookie].block_ptr;
         
         /* Find a free entry */
         ed = ether_desc_blk[proto->ifp->family_cookie].block_ptr;
         
         /* Find a free entry */
@@ -248,6 +246,7 @@ ether_add_proto(struct ddesc_head_str *desc_head, struct if_proto *proto, u_long
             FREE(ether_desc_blk[proto->ifp->family_cookie].block_ptr, M_IFADDR);
             ether_desc_blk[proto->ifp->family_cookie].n_count = new_count;
             ether_desc_blk[proto->ifp->family_cookie].block_ptr = (struct en_desc*)tmp;
             FREE(ether_desc_blk[proto->ifp->family_cookie].block_ptr, M_IFADDR);
             ether_desc_blk[proto->ifp->family_cookie].n_count = new_count;
             ether_desc_blk[proto->ifp->family_cookie].block_ptr = (struct en_desc*)tmp;
+           ed = ether_desc_blk[proto->ifp->family_cookie].block_ptr;
         }
         
         /* Bump n_max_used if appropriate */
         }
         
         /* Bump n_max_used if appropriate */
@@ -324,6 +323,7 @@ int ether_demux(ifp, m, frame_header, proto)
 {
     register struct ether_header *eh = (struct ether_header *)frame_header;
     u_short                    ether_type = eh->ether_type;
 {
     register struct ether_header *eh = (struct ether_header *)frame_header;
     u_short                    ether_type = eh->ether_type;
+    u_short                    ether_type_host;
     u_int16_t          type;
     u_int8_t           *data;
     u_long                     i = 0;
     u_int16_t          type;
     u_int8_t           *data;
     u_long                     i = 0;
@@ -358,15 +358,18 @@ int ether_demux(ifp, m, frame_header, proto)
             return EJUSTRETURN;
         }
     }
             return EJUSTRETURN;
         }
     }
-    
+    ether_type_host = ntohs(ether_type);
+    if ((m->m_pkthdr.csum_flags & CSUM_VLAN_TAG_VALID)
+       || ether_type_host == ETHERTYPE_VLAN) {
+       return (vlan_demux(ifp, m, frame_header, proto));
+    }
     data = mtod(m, u_int8_t*);
     data = mtod(m, u_int8_t*);
-    
+
     /*
      * Determine the packet's protocol type and stuff the protocol into
      * longs for quick compares.
      */
     /*
      * Determine the packet's protocol type and stuff the protocol into
      * longs for quick compares.
      */
-    
-    if (ntohs(ether_type) <= 1500) {
+    if (ether_type_host <= 1500) {
         extProto1 = *(u_int32_t*)data;
         
         // SAP or SNAP
         extProto1 = *(u_int32_t*)data;
         
         // SAP or SNAP
@@ -418,7 +421,7 @@ int ether_demux(ifp, m, frame_header, proto)
     }
     
     return ENOENT;
     }
     
     return ENOENT;
-}                      
+}
 
 
 
 
 
 
@@ -438,7 +441,7 @@ ether_frameout(ifp, m, ndest, edst, ether_type)
        char                    *ether_type;
 {
        register struct ether_header *eh;
        char                    *ether_type;
 {
        register struct ether_header *eh;
-       int hlen;       /* link layer header lenght */
+       int hlen;       /* link layer header length */
        struct arpcom *ac = IFP2AC(ifp);
 
 
        struct arpcom *ac = IFP2AC(ifp);
 
 
@@ -496,8 +499,9 @@ ether_frameout(ifp, m, ndest, edst, ether_type)
 }
 
 
 }
 
 
-static
-int  ether_add_if(struct ifnet *ifp)
+
+__private_extern__ int
+ether_add_if(struct ifnet *ifp)
 {
     u_long  i;
 
 {
     u_long  i;
 
@@ -505,6 +509,7 @@ int  ether_add_if(struct ifnet *ifp)
     ifp->if_demux  = ether_demux;
     ifp->if_event  = 0;
     ifp->if_resolvemulti = ether_resolvemulti;
     ifp->if_demux  = ether_demux;
     ifp->if_event  = 0;
     ifp->if_resolvemulti = ether_resolvemulti;
+    ifp->if_nvlans = 0;
 
     for (i=0; i < MAX_INTERFACES; i++)
         if (ether_desc_blk[i].n_count == 0)
 
     for (i=0; i < MAX_INTERFACES; i++)
         if (ether_desc_blk[i].n_count == 0)
@@ -526,8 +531,8 @@ int  ether_add_if(struct ifnet *ifp)
     return 0;
 }
 
     return 0;
 }
 
-static
-int  ether_del_if(struct ifnet *ifp)
+__private_extern__ int
+ether_del_if(struct ifnet *ifp)
 {
     if ((ifp->family_cookie < MAX_INTERFACES) &&
         (ether_desc_blk[ifp->family_cookie].n_count))
 {
     if ((ifp->family_cookie < MAX_INTERFACES) &&
         (ether_desc_blk[ifp->family_cookie].n_count))
@@ -542,8 +547,8 @@ int  ether_del_if(struct ifnet *ifp)
         return ENOENT;
 }
 
         return ENOENT;
 }
 
-static
-int  ether_init_if(struct ifnet *ifp)
+__private_extern__ int
+ether_init_if(struct ifnet *ifp)
 {
     register struct ifaddr *ifa;
     register struct sockaddr_dl *sdl;
 {
     register struct ifaddr *ifa;
     register struct sockaddr_dl *sdl;
@@ -551,7 +556,7 @@ int  ether_init_if(struct ifnet *ifp)
     ifa = ifnet_addrs[ifp->if_index - 1];
     if (ifa == 0) {
             printf("ether_ifattach: no lladdr!\n");
     ifa = ifnet_addrs[ifp->if_index - 1];
     if (ifa == 0) {
             printf("ether_ifattach: no lladdr!\n");
-            return;
+            return (EINVAL);
     }
     sdl = (struct sockaddr_dl *)ifa->ifa_addr;
     sdl->sdl_type = IFT_ETHER;
     }
     sdl = (struct sockaddr_dl *)ifa->ifa_addr;
     sdl->sdl_type = IFT_ETHER;
@@ -619,6 +624,7 @@ int ether_family_init()
     int  i, error=0;
     struct dlil_ifmod_reg_str  ifmod_reg;
     struct dlil_protomod_reg_str enet_protoreg;
     int  i, error=0;
     struct dlil_ifmod_reg_str  ifmod_reg;
     struct dlil_protomod_reg_str enet_protoreg;
+    extern int vlan_family_init(void);
 
     /* ethernet family is built-in, called from bsd_init */
     thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
 
     /* ethernet family is built-in, called from bsd_init */
     thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
@@ -634,28 +640,32 @@ int ether_family_init()
 
     if (dlil_reg_if_modules(APPLE_IF_FAM_ETHERNET, &ifmod_reg)) {
         printf("WARNING: ether_family_init -- Can't register if family modules\n");
 
     if (dlil_reg_if_modules(APPLE_IF_FAM_ETHERNET, &ifmod_reg)) {
         printf("WARNING: ether_family_init -- Can't register if family modules\n");
-        return EIO;
+        error = EIO;
+       goto done;
     }
 
     }
 
-    for (i=0; i < MAX_INTERFACES; i++)
-        ether_desc_blk[i].n_count = 0;
-
-       /* Register protocol registration functions */
-
-       bzero(&enet_protoreg, sizeof(enet_protoreg));
-       enet_protoreg.attach_proto = ether_attach_inet;
-       enet_protoreg.detach_proto = ether_detach_inet;
-       
-       if ( error = dlil_reg_proto_module(PF_INET, APPLE_IF_FAM_ETHERNET, &enet_protoreg) != 0)
-               kprintf("dlil_reg_proto_module failed for AF_INET6 error=%d\n", error);
-
 
 
-       enet_protoreg.attach_proto = ether_attach_inet6;
-       enet_protoreg.detach_proto = ether_detach_inet6;
-       
-       if ( error = dlil_reg_proto_module(PF_INET6, APPLE_IF_FAM_ETHERNET, &enet_protoreg) != 0)
-               kprintf("dlil_reg_proto_module failed for AF_INET6 error=%d\n", error);
+    /* Register protocol registration functions */
+    
+    bzero(&enet_protoreg, sizeof(enet_protoreg));
+    enet_protoreg.attach_proto = ether_attach_inet;
+    enet_protoreg.detach_proto = ether_detach_inet;
+    
+    if (error = dlil_reg_proto_module(PF_INET, APPLE_IF_FAM_ETHERNET, &enet_protoreg) != 0) {
+       printf("ether_family_init: dlil_reg_proto_module failed for AF_INET error=%d\n", error);
+       goto done;
+    }
+    
+    enet_protoreg.attach_proto = ether_attach_inet6;
+    enet_protoreg.detach_proto = ether_detach_inet6;
+    
+    if (error = dlil_reg_proto_module(PF_INET6, APPLE_IF_FAM_ETHERNET, &enet_protoreg) != 0) {
+       printf("ether_family_init: dlil_reg_proto_module failed for AF_INET6 error=%d\n", error);
+       goto done;
+    }
+    vlan_family_init();
 
 
+ done:
     thread_funnel_switch(NETWORK_FUNNEL, KERNEL_FUNNEL);
 
     return (error);
     thread_funnel_switch(NETWORK_FUNNEL, KERNEL_FUNNEL);
 
     return (error);
index 81ea2564b810980b69661f2878425ff6eb0eaf4b..5e9cc8f74361a7fddd36d80c3ed63a4088730d5c 100644 (file)
@@ -106,6 +106,7 @@ static u_char       etherbroadcastaddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 
 
 
 
 
 
+extern void * kdp_get_interface();
 
 /*
  * Process a received Ethernet packet;
 
 /*
  * Process a received Ethernet packet;
@@ -227,7 +228,7 @@ inet_ether_pre_output(ifp, m0, dst_netaddr, route, type, edst, dl_tag )
     register struct rtentry *rt;
     register struct ether_header *eh;
     int off, len = m->m_pkthdr.len;
     register struct rtentry *rt;
     register struct ether_header *eh;
     int off, len = m->m_pkthdr.len;
-    int hlen;  /* link layer header lenght */
+    int hlen;  /* link layer header length */
     struct arpcom *ac = IFP2AC(ifp);
 
 
     struct arpcom *ac = IFP2AC(ifp);
 
 
@@ -366,12 +367,13 @@ ether_inet_prmod_ioctl(dl_tag, ifp, command, data)
                ifp->if_init(ifp->if_softc);    /* before arpwhohas */
 
            arp_ifinit(IFP2AC(ifp), ifa);
                ifp->if_init(ifp->if_softc);    /* before arpwhohas */
 
            arp_ifinit(IFP2AC(ifp), ifa);
-
            /*
             * Register new IP and MAC addresses with the kernel debugger
            /*
             * Register new IP and MAC addresses with the kernel debugger
-            * for the en0 interface.
+            * if the interface is the same as was registered by IOKernelDebugger. If
+                * no interface was registered, fall back and just match against en0 interface.
             */
             */
-           if (ifp->if_unit == 0)
+           if ((kdp_get_interface() != 0 && kdp_get_interface() == ifp->if_private)
+                || (kdp_get_interface() == 0 && ifp->if_unit == 0))
                kdp_set_ip_and_mac_addresses(&(IA_SIN(ifa)->sin_addr), &(IFP2AC(ifp)->ac_enaddr));
 
            break;
                kdp_set_ip_and_mac_addresses(&(IA_SIN(ifa)->sin_addr), &(IFP2AC(ifp)->ac_enaddr));
 
            break;
index d193b0e9947db5ee9e934fa818daac4112b72b94..5659b1c9d327b73264743ab15916797f9bee39e8 100644 (file)
@@ -102,6 +102,9 @@ static int ifconf __P((u_long, caddr_t));
 static void if_qflush __P((struct ifqueue *));
 static void link_rtrequest __P((int, struct rtentry *, struct sockaddr *));
 
 static void if_qflush __P((struct ifqueue *));
 static void link_rtrequest __P((int, struct rtentry *, struct sockaddr *));
 
+static struct  if_clone *if_clone_lookup(const char *, int *);
+static int     if_clone_list(struct if_clonereq *);
+
 MALLOC_DEFINE(M_IFADDR, "ifaddr", "interface address");
 MALLOC_DEFINE(M_IFMADDR, "ether_multi", "link-level multicast address");
 
 MALLOC_DEFINE(M_IFADDR, "ifaddr", "interface address");
 MALLOC_DEFINE(M_IFMADDR, "ether_multi", "link-level multicast address");
 
@@ -109,6 +112,9 @@ int ifqmaxlen = IFQ_MAXLEN;
 struct ifnethead ifnet = TAILQ_HEAD_INITIALIZER(ifnet);
 struct ifmultihead ifma_lostlist = LIST_HEAD_INITIALIZER(ifma_lostlist);
 
 struct ifnethead ifnet = TAILQ_HEAD_INITIALIZER(ifnet);
 struct ifmultihead ifma_lostlist = LIST_HEAD_INITIALIZER(ifma_lostlist);
 
+static int     if_cloners_count;
+LIST_HEAD(, if_clone) if_cloners = LIST_HEAD_INITIALIZER(if_cloners);
+
 #if INET6
 /*
  * XXX: declare here to avoid to include many inet6 related files..
 #if INET6
 /*
  * XXX: declare here to avoid to include many inet6 related files..
@@ -117,6 +123,8 @@ struct ifmultihead ifma_lostlist = LIST_HEAD_INITIALIZER(ifma_lostlist);
 extern void    nd6_setmtu __P((struct ifnet *));
 #endif
 
 extern void    nd6_setmtu __P((struct ifnet *));
 #endif
 
+#define M_CLONE                M_IFADDR
+
 /*
  * Network interface utility routines.
  *
 /*
  * Network interface utility routines.
  *
@@ -281,6 +289,245 @@ old_if_attach(ifp)
        TAILQ_INSERT_TAIL(&ifnet, ifp, if_link);
 }
 
        TAILQ_INSERT_TAIL(&ifnet, ifp, if_link);
 }
 
+/*
+ * Create a clone network interface.
+ */
+static int
+if_clone_create(char *name, int len)
+{
+       struct if_clone *ifc;
+       char *dp;
+       int wildcard, bytoff, bitoff;
+       int unit;
+       int err;
+
+       ifc = if_clone_lookup(name, &unit);
+       if (ifc == NULL)
+               return (EINVAL);
+
+       if (ifunit(name) != NULL)
+               return (EEXIST);
+
+       bytoff = bitoff = 0;
+       wildcard = (unit < 0);
+       /*
+        * Find a free unit if none was given.
+        */
+       if (wildcard) {
+               while ((bytoff < ifc->ifc_bmlen)
+                   && (ifc->ifc_units[bytoff] == 0xff))
+                       bytoff++;
+               if (bytoff >= ifc->ifc_bmlen)
+                       return (ENOSPC);
+               while ((ifc->ifc_units[bytoff] & (1 << bitoff)) != 0)
+                       bitoff++;
+               unit = (bytoff << 3) + bitoff;
+       }
+
+       if (unit > ifc->ifc_maxunit)
+               return (ENXIO);
+
+       err = (*ifc->ifc_create)(ifc, unit);
+       if (err != 0)
+               return (err);
+
+       if (!wildcard) {
+               bytoff = unit >> 3;
+               bitoff = unit - (bytoff << 3);
+       }
+
+       /*
+        * Allocate the unit in the bitmap.
+        */
+       KASSERT((ifc->ifc_units[bytoff] & (1 << bitoff)) == 0,
+           ("%s: bit is already set", __func__));
+       ifc->ifc_units[bytoff] |= (1 << bitoff);
+
+       /* In the wildcard case, we need to update the name. */
+       if (wildcard) {
+               for (dp = name; *dp != '\0'; dp++);
+               if (snprintf(dp, len - (dp-name), "%d", unit) >
+                   len - (dp-name) - 1) {
+                       /*
+                        * This can only be a programmer error and
+                        * there's no straightforward way to recover if
+                        * it happens.
+                        */
+                       panic("if_clone_create(): interface name too long");
+               }
+
+       }
+
+       return (0);
+}
+
+/*
+ * Destroy a clone network interface.
+ */
+int
+if_clone_destroy(const char *name)
+{
+       struct if_clone *ifc;
+       struct ifnet *ifp;
+       int bytoff, bitoff;
+       int unit;
+
+       ifc = if_clone_lookup(name, &unit);
+       if (ifc == NULL)
+               return (EINVAL);
+
+       if (unit < ifc->ifc_minifs)
+               return (EINVAL);
+
+       ifp = ifunit(name);
+       if (ifp == NULL)
+               return (ENXIO);
+
+       if (ifc->ifc_destroy == NULL)
+               return (EOPNOTSUPP);
+
+       (*ifc->ifc_destroy)(ifp);
+
+       /*
+        * Compute offset in the bitmap and deallocate the unit.
+        */
+       bytoff = unit >> 3;
+       bitoff = unit - (bytoff << 3);
+       KASSERT((ifc->ifc_units[bytoff] & (1 << bitoff)) != 0,
+           ("%s: bit is already cleared", __func__));
+       ifc->ifc_units[bytoff] &= ~(1 << bitoff);
+       return (0);
+}
+
+/*
+ * Look up a network interface cloner.
+ */
+
+static struct if_clone *
+if_clone_lookup(const char *name, int *unitp)
+{
+       struct if_clone *ifc;
+       const char *cp;
+       int i;
+
+       for (ifc = LIST_FIRST(&if_cloners); ifc != NULL;) {
+               for (cp = name, i = 0; i < ifc->ifc_namelen; i++, cp++) {
+                       if (ifc->ifc_name[i] != *cp)
+                               goto next_ifc;
+               }
+               goto found_name;
+ next_ifc:
+               ifc = LIST_NEXT(ifc, ifc_list);
+       }
+
+       /* No match. */
+       return ((struct if_clone *)NULL);
+
+ found_name:
+       if (*cp == '\0') {
+               i = -1;
+       } else {
+               for (i = 0; *cp != '\0'; cp++) {
+                       if (*cp < '0' || *cp > '9') {
+                               /* Bogus unit number. */
+                               return (NULL);
+                       }
+                       i = (i * 10) + (*cp - '0');
+               }
+       }
+
+       if (unitp != NULL)
+               *unitp = i;
+       return (ifc);
+}
+
+/*
+ * Register a network interface cloner.
+ */
+void
+if_clone_attach(struct if_clone *ifc)
+{
+       int bytoff, bitoff;
+       int err;
+       int len, maxclone;
+       int unit;
+
+       KASSERT(ifc->ifc_minifs - 1 <= ifc->ifc_maxunit,
+           ("%s: %s requested more units then allowed (%d > %d)",
+           __func__, ifc->ifc_name, ifc->ifc_minifs,
+           ifc->ifc_maxunit + 1));
+       /*
+        * Compute bitmap size and allocate it.
+        */
+       maxclone = ifc->ifc_maxunit + 1;
+       len = maxclone >> 3;
+       if ((len << 3) < maxclone)
+               len++;
+       ifc->ifc_units = _MALLOC(len, M_CLONE, M_WAITOK | M_ZERO);
+       bzero(ifc->ifc_units, len);
+       ifc->ifc_bmlen = len;
+
+       LIST_INSERT_HEAD(&if_cloners, ifc, ifc_list);
+       if_cloners_count++;
+
+       for (unit = 0; unit < ifc->ifc_minifs; unit++) {
+               err = (*ifc->ifc_create)(ifc, unit);
+               KASSERT(err == 0,
+                   ("%s: failed to create required interface %s%d",
+                   __func__, ifc->ifc_name, unit));
+
+               /* Allocate the unit in the bitmap. */
+               bytoff = unit >> 3;
+               bitoff = unit - (bytoff << 3);
+               ifc->ifc_units[bytoff] |= (1 << bitoff);
+       }
+}
+
+/*
+ * Unregister a network interface cloner.
+ */
+void
+if_clone_detach(struct if_clone *ifc)
+{
+
+       LIST_REMOVE(ifc, ifc_list);
+       FREE(ifc->ifc_units, M_CLONE);
+       if_cloners_count--;
+}
+
+/*
+ * Provide list of interface cloners to userspace.
+ */
+static int
+if_clone_list(struct if_clonereq *ifcr)
+{
+       char outbuf[IFNAMSIZ], *dst;
+       struct if_clone *ifc;
+       int count, error = 0;
+
+       ifcr->ifcr_total = if_cloners_count;
+       if ((dst = ifcr->ifcr_buffer) == NULL) {
+               /* Just asking how many there are. */
+               return (0);
+       }
+
+       if (ifcr->ifcr_count < 0)
+               return (EINVAL);
+
+       count = (if_cloners_count < ifcr->ifcr_count) ?
+           if_cloners_count : ifcr->ifcr_count;
+
+       for (ifc = LIST_FIRST(&if_cloners); ifc != NULL && count != 0;
+            ifc = LIST_NEXT(ifc, ifc_list), count--, dst += IFNAMSIZ) {
+               strncpy(outbuf, ifc->ifc_name, IFNAMSIZ - 1);
+               error = copyout(outbuf, dst, IFNAMSIZ);
+               if (error)
+                       break;
+       }
+
+       return (error);
+}
+
 __private_extern__ int
 ifa_foraddr(addr)
        unsigned int addr;
 __private_extern__ int
 ifa_foraddr(addr)
        unsigned int addr;
@@ -723,6 +970,22 @@ ifioctl(so, cmd, data, p)
                return (ifconf(cmd, data));
        }
        ifr = (struct ifreq *)data;
                return (ifconf(cmd, data));
        }
        ifr = (struct ifreq *)data;
+
+       switch (cmd) {
+       case SIOCIFCREATE:
+       case SIOCIFDESTROY:
+               error = suser(p->p_ucred, &p->p_acflag);
+               if (error)
+                       return (error);
+               return ((cmd == SIOCIFCREATE) ?
+                       if_clone_create(ifr->ifr_name, sizeof(ifr->ifr_name)) :
+                       if_clone_destroy(ifr->ifr_name));
+#if 0
+       case SIOCIFGCLONERS:
+               return (if_clone_list((struct if_clonereq *)data));
+#endif 0
+       }
+
        ifp = ifunit(ifr->ifr_name);
        if (ifp == 0)
                return (ENXIO);
        ifp = ifunit(ifr->ifr_name);
        if (ifp == 0)
                return (ENXIO);
@@ -921,6 +1184,10 @@ ifioctl(so, cmd, data, p)
                }
                return error;
 
                }
                return error;
 
+       case SIOCSETVLAN:
+               if (ifp->if_type != IFT_L2VLAN) {
+                       return (EOPNOTSUPP);
+               }
        case SIOCSIFPHYADDR:
        case SIOCDIFPHYADDR:
 #ifdef INET6
        case SIOCSIFPHYADDR:
        case SIOCDIFPHYADDR:
 #ifdef INET6
@@ -953,6 +1220,12 @@ ifioctl(so, cmd, data, p)
 
                return dlil_ioctl(so->so_proto->pr_domain->dom_family, 
                                   ifp, cmd, (caddr_t) data);
 
                return dlil_ioctl(so->so_proto->pr_domain->dom_family, 
                                   ifp, cmd, (caddr_t) data);
+       case SIOCGETVLAN:
+               if (ifp->if_type != IFT_L2VLAN) {
+                       return (EOPNOTSUPP);
+               }
+               return dlil_ioctl(so->so_proto->pr_domain->dom_family, 
+                                  ifp, cmd, (caddr_t) data);
 
        default:
                oif_flags = ifp->if_flags;
 
        default:
                oif_flags = ifp->if_flags;
index e034a4faa0509954fcbe5d28ad1184ae13ef42d0..2b69a6998874e949d472a2044de65b164a255398 100644 (file)
  */
 #include <sys/time.h>
 
  */
 #include <sys/time.h>
 
+
 #ifdef __APPLE__
 #include <net/if_var.h>
 #endif
 
 #ifdef __APPLE__
 #include <net/if_var.h>
 #endif
 
+#ifdef KERNEL_PRIVATE
+struct if_clonereq {
+       int     ifcr_total;             /* total cloners (out) */
+       int     ifcr_count;             /* room for this many in user buffer */
+       char    *ifcr_buffer;           /* buffer for cloner names */
+};
+#endif KERNEL_PRIVATE
 
 #define        IFF_UP          0x1             /* interface is up */
 #define        IFF_BROADCAST   0x2             /* broadcast address valid */
 
 #define        IFF_UP          0x1             /* interface is up */
 #define        IFF_BROADCAST   0x2             /* broadcast address valid */
 #define        IFF_ALTPHYS     IFF_LINK2       /* use alternate physical connection */
 #define        IFF_MULTICAST   0x8000          /* supports multicast */
 
 #define        IFF_ALTPHYS     IFF_LINK2       /* use alternate physical connection */
 #define        IFF_MULTICAST   0x8000          /* supports multicast */
 
-#if KERNEL_PRIVATE
+#ifdef KERNEL_PRIVATE
 /* extended flags definitions:  (all bits are reserved for internal/future use) */
 #define IFEF_AUTOCONFIGURING   0x1
 #define IFEF_DVR_REENTRY_OK    0x20    /* When set, driver may be reentered from its own thread */
 /* extended flags definitions:  (all bits are reserved for internal/future use) */
 #define IFEF_AUTOCONFIGURING   0x1
 #define IFEF_DVR_REENTRY_OK    0x20    /* When set, driver may be reentered from its own thread */
index ddbc94393bfa858cb450ff561d8b6bf63e365563..3cc9143a3bcf3c3fb731ab1ee90007d4f1739dd0 100644 (file)
@@ -432,13 +432,8 @@ lortrequest(cmd, rt, sa)
 /*
  * Process an ioctl request.
  */
 /*
  * Process an ioctl request.
  */
-/* ARGSUSED */
 static int
 static int
-loioctl(dl_tag, ifp, cmd, data)
-       u_long   dl_tag;
-       register struct ifnet *ifp;
-       u_long cmd;
-       void   *data;
+lo_if_ioctl(struct ifnet *ifp, u_long cmd, void * data)
 {
        register struct ifaddr *ifa;
        register struct ifreq *ifr = (struct ifreq *)data;
 {
        register struct ifaddr *ifa;
        register struct ifreq *ifr = (struct ifreq *)data;
@@ -487,9 +482,17 @@ loioctl(dl_tag, ifp, cmd, data)
 
        default:
                error = EOPNOTSUPP;
 
        default:
                error = EOPNOTSUPP;
+               break;
        }
        return (error);
 }
        }
        return (error);
 }
+
+static int
+loioctl(u_long dl_tag, struct ifnet *ifp, u_long cmd, caddr_t data)
+{
+    return (lo_if_ioctl(ifp, cmd, data));
+}
+
 #endif /* NLOOP > 0 */
 
 
 #endif /* NLOOP > 0 */
 
 
@@ -654,7 +657,7 @@ loopattach(dummy)
                ifp->if_unit = i++;
                ifp->if_mtu = LOMTU;
                ifp->if_flags = IFF_LOOPBACK | IFF_MULTICAST;
                ifp->if_unit = i++;
                ifp->if_mtu = LOMTU;
                ifp->if_flags = IFF_LOOPBACK | IFF_MULTICAST;
-               ifp->if_ioctl = loioctl;
+               ifp->if_ioctl = lo_if_ioctl;
                ifp->if_set_bpf_tap = lo_set_bpf_tap;
                ifp->if_output = lo_output;
                ifp->if_type = IFT_LOOP;
                ifp->if_set_bpf_tap = lo_set_bpf_tap;
                ifp->if_output = lo_output;
                ifp->if_type = IFT_LOOP;
index 2b27c7489916fe7da4a7c49ddebfee1a21240b80..f23d8ff9b93ef64ddf7a34e6badccdfbf808fa40 100644 (file)
@@ -143,6 +143,21 @@ TAILQ_HEAD(ifprefixhead, ifprefix);
 LIST_HEAD(ifmultihead, ifmultiaddr);
 
 #ifdef __APPLE__
 LIST_HEAD(ifmultihead, ifmultiaddr);
 
 #ifdef __APPLE__
+#ifdef KERNEL_PRIVATE
+/* bottom 16 bits reserved for hardware checksum */
+#define IF_HWASSIST_CSUM_IP            0x0001  /* will csum IP */
+#define IF_HWASSIST_CSUM_TCP           0x0002  /* will csum TCP */
+#define IF_HWASSIST_CSUM_UDP           0x0004  /* will csum UDP */
+#define IF_HWASSIST_CSUM_IP_FRAGS      0x0008  /* will csum IP fragments */
+#define IF_HWASSIST_CSUM_FRAGMENT      0x0010  /* will do IP fragmentation */
+#define IF_HWASSIST_CSUM_TCP_SUM16     0x1000  /* simple TCP Sum16 computation */
+#define IF_HWASSIST_CSUM_MASK          0xffff
+#define IF_HWASSIST_CSUM_FLAGS(hwassist)       ((hwassist) & IF_HWASSIST_CSUM_MASK)
+
+/* VLAN support */
+#define IF_HWASSIST_VLAN_TAGGING       0x10000 /* supports VLAN tagging */
+#define IF_HWASSIST_VLAN_MTU           0x20000 /* supports VLAN MTU-sized packet (for software VLAN) */
+#endif KERNEL_PRIVATE
 /*
  * Structure describing information about an interface
  * which may be of interest to management entities.
 /*
  * Structure describing information about an interface
  * which may be of interest to management entities.
@@ -183,7 +198,12 @@ struct if_data {
                                                                 * on dlil_output */
 #endif
        u_long  ifi_hwassist;           /* HW offload capabilities */
                                                                 * on dlil_output */
 #endif
        u_long  ifi_hwassist;           /* HW offload capabilities */
+#ifdef KERNEL_PRIVATE
+       u_short ifi_nvlans;             /* number of attached vlans */
+       u_short ifi_reserved_1;         /* for future use */
+#else KERNEL_PRIVATE
        u_long  ifi_reserved1;          /* for future use */
        u_long  ifi_reserved1;          /* for future use */
+#endif KERNEL_PRIVATE
        u_long  ifi_reserved2;          /* for future use */
 };
 #endif
        u_long  ifi_reserved2;          /* for future use */
 };
 #endif
@@ -316,6 +336,9 @@ typedef void if_init_f_t __P((void *));
 #define        if_lastchange   if_data.ifi_lastchange
 #define if_recvquota   if_data.ifi_recvquota
 #define        if_xmitquota    if_data.ifi_xmitquota
 #define        if_lastchange   if_data.ifi_lastchange
 #define if_recvquota   if_data.ifi_recvquota
 #define        if_xmitquota    if_data.ifi_xmitquota
+#ifdef KERNEL_PRIVATE
+#define if_nvlans      if_data.ifi_nvlans
+#endif KERNEL_PRIVATE
 #define if_rawoutput(if, m, sa) if_output(if, m, sa, (struct rtentry *)0)
 
 #ifndef __APPLE__
 #define if_rawoutput(if, m, sa) if_output(if, m, sa, (struct rtentry *)0)
 
 #ifndef __APPLE__
@@ -323,6 +346,26 @@ typedef void if_init_f_t __P((void *));
 #define        if_addrlist     if_addrhead
 #define        if_list         if_link
 #endif
 #define        if_addrlist     if_addrhead
 #define        if_list         if_link
 #endif
+#ifdef KERNEL_PRIVATE
+/*
+ * Structure describing a `cloning' interface.
+ */
+struct if_clone {
+       LIST_ENTRY(if_clone) ifc_list;  /* on list of cloners */
+       const char *ifc_name;           /* name of device, e.g. `vlan' */
+       size_t ifc_namelen;             /* length of name */
+       int ifc_minifs;                 /* minimum number of interfaces */
+       int ifc_maxunit;                /* maximum unit number */
+       unsigned char *ifc_units;       /* bitmap to handle units */
+       int ifc_bmlen;                  /* bitmap length */
+
+       int     (*ifc_create)(struct if_clone *, int);
+       void    (*ifc_destroy)(struct ifnet *);
+};
+
+#define IF_CLONE_INITIALIZER(name, create, destroy, minifs, maxunit)   \
+    { { 0 }, name, sizeof(name) - 1, minifs, maxunit, NULL, 0, create, destroy }
+#endif
 
 /*
  * Bit values in if_ipending
 
 /*
  * Bit values in if_ipending
@@ -509,6 +552,10 @@ void       if_poll_throttle __P((void));
 void   if_poll_unthrottle __P((void *));
 void   if_poll_init __P((void));
 void   if_poll __P((void));
 void   if_poll_unthrottle __P((void *));
 void   if_poll_init __P((void));
 void   if_poll __P((void));
+#ifdef KERNEL_PRIVATE
+void   if_clone_attach(struct if_clone *);
+void   if_clone_detach(struct if_clone *);
+#endif KERNEL_PRIVATE
 
 struct ifaddr *ifa_ifwithaddr __P((struct sockaddr *));
 struct ifaddr *ifa_ifwithdstaddr __P((struct sockaddr *));
 
 struct ifaddr *ifa_ifwithaddr __P((struct sockaddr *));
 struct ifaddr *ifa_ifwithdstaddr __P((struct sockaddr *));
index 1ca90929239b9ce20de79a07506d38573a205abb..dee4b7782ce1b68c3c176adf69987559039d986e 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
@@ -50,6 +50,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
+ * $FreeBSD: src/sys/net/if_vlan.c,v 1.54 2003/10/31 18:32:08 brooks Exp $
  */
 
 /*
  */
 
 /*
  * we need to pretend to be enough of an Ethernet implementation
  * to make arp work.  The way we do this is by telling everyone
  * that we are an Ethernet, and then catch the packets that
  * we need to pretend to be enough of an Ethernet implementation
  * to make arp work.  The way we do this is by telling everyone
  * that we are an Ethernet, and then catch the packets that
- * ether_output() left on our output queue queue when it calls
+ * ether_output() left on our output queue when it calls
  * if_start(), rewrite them for use by the real outgoing interface,
  * and ask it to send them.
  * if_start(), rewrite them for use by the real outgoing interface,
  * and ask it to send them.
- *
- *
- * XXX It's incorrect to assume that we must always kludge up
- * headers on the physical device's behalf: some devices support
- * VLAN tag insersion and extraction in firmware. For these cases,
- * one can change the behavior of the vlan interface by setting
- * the LINK0 flag on it (that is setting the vlan interface's LINK0
- * flag, _not_ the parent's LINK0 flag; we try to leave the parent
- * alone). If the interface as the LINK0 flag set, then it will
- * not modify the ethernet header on output because the parent
- * can do that for itself. On input, the parent can call vlan_input_tag()
- * directly in order to supply us with an incoming mbuf and the vlan
- * tag value that goes with it.
  */
 
  */
 
-#include "vlan.h"
-#if NVLAN > 0
-#include "opt_inet.h"
-#include "bpfilter.h"
 
 #include <sys/param.h>
 #include <sys/kernel.h>
 
 #include <sys/param.h>
 #include <sys/kernel.h>
+#include <sys/malloc.h>
 #include <sys/mbuf.h>
 #include <sys/mbuf.h>
+#include <sys/queue.h>
 #include <sys/socket.h>
 #include <sys/sockio.h>
 #include <sys/sysctl.h>
 #include <sys/systm.h>
 #include <sys/socket.h>
 #include <sys/sockio.h>
 #include <sys/sysctl.h>
 #include <sys/systm.h>
+#include <sys/kern_event.h>
 
 
-#if NBPFILTER > 0
 #include <net/bpf.h>
 #include <net/bpf.h>
-#endif
 #include <net/ethernet.h>
 #include <net/if.h>
 #include <net/if_arp.h>
 #include <net/ethernet.h>
 #include <net/if.h>
 #include <net/if_arp.h>
 #include <net/if_types.h>
 #include <net/if_vlan_var.h>
 
 #include <net/if_types.h>
 #include <net/if_vlan_var.h>
 
-#if INET
+#include <net/dlil.h>
+
+#ifdef INET
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
 #endif
 
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
 #endif
 
+#include <net/if_media.h>
+
+#define        ETHER_VLAN_ENCAP_LEN    4       /* len of 802.1Q VLAN encapsulation */
+#define        IF_MAXUNIT      0x7fff          /* historical value */
+
+#define IFP2AC(p) ((struct arpcom *)p)
+
+#define VLAN_PROTO_FAMILY      0x766c616e /* 'vlan' */
+
+#define VLANNAME       "vlan"
+
+typedef int (bpf_callback_func)(struct ifnet *, struct mbuf *);
+typedef int (if_set_bpf_tap_func)(struct ifnet *ifp, int mode, bpf_callback_func * func);
+
+struct vlan_mc_entry {
+    struct ether_addr          mc_addr;
+    SLIST_ENTRY(vlan_mc_entry) mc_entries;
+};
+
+struct ifvlan {
+    char       ifv_name[IFNAMSIZ]; /* our unique id */
+    struct  ifnet *ifv_ifp;  /* our interface */
+    struct     ifnet *ifv_p;   /* parent interface of this vlan */
+    struct     ifv_linkmib {
+       int     ifvm_parent;
+       int     ifvm_encaplen;  /* encapsulation length */
+       int     ifvm_mtufudge;  /* MTU fudged by this much */
+       int     ifvm_mintu;     /* min transmission unit */
+       u_int16_t ifvm_proto; /* encapsulation ethertype */
+       u_int16_t ifvm_tag; /* tag to apply on packets leaving if */
+    }  ifv_mib;
+    SLIST_HEAD(__vlan_mchead, vlan_mc_entry)   vlan_mc_listhead;
+    LIST_ENTRY(ifvlan) ifv_list;
+    int        ifv_flags;
+    int ifv_detaching;
+    u_long ifv_filter_id;
+    int ifv_filter_valid;
+    bpf_callback_func *        ifv_bpf_input;
+    bpf_callback_func * ifv_bpf_output;
+};
+
+#define        ifv_tag ifv_mib.ifvm_tag
+#define        ifv_encaplen    ifv_mib.ifvm_encaplen
+#define        ifv_mtufudge    ifv_mib.ifvm_mtufudge
+#define        ifv_mintu       ifv_mib.ifvm_mintu
+
+#define        IFVF_PROMISC            0x01            /* promiscuous mode enabled */
+
+#if 0
 SYSCTL_DECL(_net_link);
 SYSCTL_DECL(_net_link);
-SYSCTL_NODE(_net_link, IFT_8021_VLAN, vlan, CTLFLAG_RW, 0, "IEEE 802.1Q VLAN");
+SYSCTL_NODE(_net_link, IFT_L2VLAN, vlan, CTLFLAG_RW, 0, "IEEE 802.1Q VLAN");
 SYSCTL_NODE(_net_link_vlan, PF_LINK, link, CTLFLAG_RW, 0, "for consistency");
 SYSCTL_NODE(_net_link_vlan, PF_LINK, link, CTLFLAG_RW, 0, "for consistency");
+#endif 0
+
+#define M_VLAN                 M_DEVBUF
 
 
-u_int  vlan_proto = ETHERTYPE_VLAN;
-SYSCTL_INT(_net_link_vlan_link, VLANCTL_PROTO, proto, CTLFLAG_RW, &vlan_proto,
-          0, "Ethernet protocol used for VLAN encapsulation");
+MALLOC_DEFINE(M_VLAN, VLANNAME, "802.1Q Virtual LAN Interface");
 
 
-static struct ifvlan ifv_softc[NVLAN];
+static LIST_HEAD(, ifvlan) ifv_list;
 
 
-static void vlan_start(struct ifnet *ifp);
+#if 0
+/*
+ * Locking: one lock is used to guard both the ifv_list and modification
+ * to vlan data structures.  We are rather conservative here; probably
+ * more than necessary.
+ */
+static struct mtx ifv_mtx;
+#define        VLAN_LOCK_INIT()        mtx_init(&ifv_mtx, VLANNAME, NULL, MTX_DEF)
+#define        VLAN_LOCK_DESTROY()     mtx_destroy(&ifv_mtx)
+#define        VLAN_LOCK_ASSERT()      mtx_assert(&ifv_mtx, MA_OWNED)
+#define        VLAN_LOCK()     mtx_lock(&ifv_mtx)
+#define        VLAN_UNLOCK()   mtx_unlock(&ifv_mtx)
+#else
+#define        VLAN_LOCK_INIT()
+#define        VLAN_LOCK_DESTROY()
+#define        VLAN_LOCK_ASSERT()
+#define        VLAN_LOCK()
+#define        VLAN_UNLOCK()
+#endif 0
+
+static int vlan_clone_create(struct if_clone *, int);
+static void vlan_clone_destroy(struct ifnet *);
+static int vlan_output(struct ifnet *ifp, struct mbuf *m);
 static void vlan_ifinit(void *foo);
 static void vlan_ifinit(void *foo);
-static int vlan_ioctl(struct ifnet *ifp, u_long cmd, caddr_t addr);
+static int vlan_ioctl(struct ifnet *ifp, u_long cmd, void * addr);
+static  int vlan_set_bpf_tap(struct ifnet * ifp, int mode,
+                            bpf_callback_func * func);
+static         int vlan_attach_protocol(struct ifnet *ifp);
+static int vlan_detach_protocol(struct ifnet *ifp);
+static         int vlan_attach_filter(struct ifnet * ifp, u_long * filter_id);
+static         int vlan_detach_filter(u_long filter_id);
 static int vlan_setmulti(struct ifnet *ifp);
 static int vlan_unconfig(struct ifnet *ifp);
 static int vlan_setmulti(struct ifnet *ifp);
 static int vlan_unconfig(struct ifnet *ifp);
-static int vlan_config(struct ifvlan *ifv, struct ifnet *p);
+static int vlan_config(struct ifvlan *ifv, struct ifnet *p, int tag);
+static int vlan_if_free(struct ifnet * ifp);
+
+static struct if_clone vlan_cloner = IF_CLONE_INITIALIZER(VLANNAME,
+                                                         vlan_clone_create, vlan_clone_destroy, 0, IF_MAXUNIT);
+
+static if_set_bpf_tap_func nop_if_bpf;
+static int nop_if_free(struct ifnet *);
+static int nop_if_ioctl(struct ifnet *, u_long, void *);
+static int nop_if_output(struct ifnet * ifp, struct mbuf * m);
+
+static         void interface_link_event(struct ifnet * ifp, u_long event_code);
+
+static __inline__ void 
+vlan_bpf_output(struct ifnet * ifp, struct mbuf * m, 
+               bpf_callback_func func)
+{
+    if (func != NULL) {
+       func(ifp, m);
+    }
+    return;
+}
+
+static __inline__ void 
+vlan_bpf_input(struct ifnet * ifp, struct mbuf * m, 
+              bpf_callback_func func, char * frame_header,
+              int frame_header_len, int encap_len)
+{
+    if (func != NULL) {
+       if (encap_len > 0) {
+           /* present the right header to bpf */
+           bcopy(frame_header, frame_header + encap_len, frame_header_len);
+       }
+       m->m_data -= frame_header_len;
+       m->m_len += frame_header_len;
+       func(ifp, m);
+       m->m_data += frame_header_len;
+       m->m_len -= frame_header_len;
+       if (encap_len > 0) {
+           /* restore the header */
+           bcopy(frame_header + encap_len, frame_header, frame_header_len);
+       }
+    }
+    return;
+}
+
+static struct ifaddr * 
+ifaddr_byindex(unsigned int i)
+{
+    if (i > if_index || i == 0) {
+       return (NULL);
+    }
+    return (ifnet_addrs[i - 1]);
+}
 
 /*
  * Program our multicast filter. What we're actually doing is
 
 /*
  * Program our multicast filter. What we're actually doing is
@@ -130,463 +248,1310 @@ static int vlan_config(struct ifvlan *ifv, struct ifnet *p);
  * later by the upper protocol layers. Unfortunately, there's no way
  * to avoid this: there really is only one physical interface.
  */
  * later by the upper protocol layers. Unfortunately, there's no way
  * to avoid this: there really is only one physical interface.
  */
-static int vlan_setmulti(struct ifnet *ifp)
+static int
+vlan_setmulti(struct ifnet *ifp)
 {
 {
-       struct ifnet            *ifp_p;
-       struct ifmultiaddr      *ifma, *rifma = NULL;
-       struct ifvlan           *sc;
-       struct vlan_mc_entry    *mc = NULL;
-       struct sockaddr_dl      sdl;
-       int                     error;
+    struct ifnet               *p;
+    struct ifmultiaddr *ifma, *rifma = NULL;
+    struct ifvlan              *sc;
+    struct vlan_mc_entry       *mc = NULL;
+    struct sockaddr_dl sdl;
+    int                        error;
 
 
-       /* Find the parent. */
-       sc = ifp->if_softc;
-       ifp_p = sc->ifv_p;
+    /* Find the parent. */
+    sc = ifp->if_private;
+    p = sc->ifv_p;
+    if (p == NULL) {
+       /* no parent, so no need to program the multicast filter */
+       return (0);
+    }
 
 
-       sdl.sdl_len = ETHER_ADDR_LEN;
-       sdl.sdl_family = AF_LINK;
+    bzero((char *)&sdl, sizeof sdl);
+    sdl.sdl_len = sizeof sdl;
+    sdl.sdl_family = AF_LINK;
+    sdl.sdl_index = p->if_index;
+    sdl.sdl_type = IFT_ETHER;
+    sdl.sdl_alen = ETHER_ADDR_LEN;
 
 
-       /* First, remove any existing filter entries. */
-       while(sc->vlan_mc_listhead.slh_first != NULL) {
-               mc = sc->vlan_mc_listhead.slh_first;
-               bcopy((char *)&mc->mc_addr, LLADDR(&sdl), ETHER_ADDR_LEN);
-               error = if_delmulti(ifp_p, (struct sockaddr *)&sdl);
-               if (error)
-                       return(error);
-               SLIST_REMOVE_HEAD(&sc->vlan_mc_listhead, mc_entries);
-               FREE(mc, M_DEVBUF);
-       }
+    /* First, remove any existing filter entries. */
+    while (SLIST_FIRST(&sc->vlan_mc_listhead) != NULL) {
+       mc = SLIST_FIRST(&sc->vlan_mc_listhead);
+       bcopy((char *)&mc->mc_addr, LLADDR(&sdl), ETHER_ADDR_LEN);
+       error = if_delmulti(p, (struct sockaddr *)&sdl);
+       if (error)
+           return(error);
+       SLIST_REMOVE_HEAD(&sc->vlan_mc_listhead, mc_entries);
+       FREE(mc, M_VLAN);
+    }
+
+    /* Now program new ones. */
+    LIST_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
+       if (ifma->ifma_addr->sa_family != AF_LINK)
+           continue;
+       mc = _MALLOC(sizeof(struct vlan_mc_entry), M_VLAN, M_WAITOK);
+       bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
+             (char *)&mc->mc_addr, ETHER_ADDR_LEN);
+       SLIST_INSERT_HEAD(&sc->vlan_mc_listhead, mc, mc_entries);
+       bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
+             LLADDR(&sdl), ETHER_ADDR_LEN);
+       error = if_addmulti(p, (struct sockaddr *)&sdl, &rifma);
+       if (error)
+           return(error);
+    }
+
+    return(0);
+}
+
+#if 0
+/*
+ * VLAN support can be loaded as a module.  The only place in the
+ * system that's intimately aware of this is ether_input.  We hook
+ * into this code through vlan_input_p which is defined there and
+ * set here.  Noone else in the system should be aware of this so
+ * we use an explicit reference here.
+ *
+ * NB: Noone should ever need to check if vlan_input_p is null or
+ *     not.  This is because interfaces have a count of the number
+ *     of active vlans (if_nvlans) and this should never be bumped
+ *     except by vlan_config--which is in this module so therefore
+ *     the module must be loaded and vlan_input_p must be non-NULL.
+ */
+extern void (*vlan_input_p)(struct ifnet *, struct mbuf *);
+
+static int
+vlan_modevent(module_t mod, int type, void *data) 
+{ 
+
+    switch (type) { 
+    case MOD_LOAD: 
+       LIST_INIT(&ifv_list);
+       VLAN_LOCK_INIT();
+       vlan_input_p = vlan_input;
+       if_clone_attach(&vlan_cloner);
+       break; 
+    case MOD_UNLOAD: 
+       if_clone_detach(&vlan_cloner);
+       vlan_input_p = NULL;
+       while (!LIST_EMPTY(&ifv_list))
+           vlan_clone_destroy(LIST_FIRST(&ifv_list)->ifv_ifp);
+       VLAN_LOCK_DESTROY();
+       break;
+    } 
+    return 0; 
+} 
+
+static moduledata_t vlan_mod = { 
+    "if_vlan", 
+    vlan_modevent, 
+    0
+}; 
+
+DECLARE_MODULE(if_vlan, vlan_mod, SI_SUB_PSEUDO, SI_ORDER_ANY);
+
+#endif 0
+
+static struct ifvlan * 
+vlan_lookup_ifp_and_tag(struct ifnet * ifp, int tag)
+{
+    struct ifvlan * ifv;
 
 
-       /* Now program new ones. */
-       for (ifma = ifp->if_multiaddrs.lh_first;
-           ifma != NULL;ifma = ifma->ifma_link.le_next) {
-               if (ifma->ifma_addr->sa_family != AF_LINK)
-                       continue;
-               mc = _MALLOC(sizeof(struct vlan_mc_entry), M_DEVBUF, M_WAITOK);
-               if (mc == NULL)
-                       return (ENOMEM);
-               bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
-                   (char *)&mc->mc_addr, ETHER_ADDR_LEN);
-               SLIST_INSERT_HEAD(&sc->vlan_mc_listhead, mc, mc_entries);
-               error = if_addmulti(ifp_p, (struct sockaddr *)&sdl, &rifma);
-               if (error)
-                       return(error);
+    LIST_FOREACH(ifv, &ifv_list, ifv_list) {
+       if (ifp == ifv->ifv_p && tag == ifv->ifv_tag) {
+           return (ifv);
        }
        }
+    }
+    return (NULL);
+}
 
 
-       return(0);
+static struct ifvlan * 
+vlan_lookup_ifp(struct ifnet * ifp)
+{
+    struct ifvlan * ifv;
+
+    LIST_FOREACH(ifv, &ifv_list, ifv_list) {
+       if (ifp == ifv->ifv_p) {
+           return (ifv);
+       }
+    }
+    return (NULL);
 }
 
 static void
 }
 
 static void
-vlaninit(void *dummy)
-{
-       int i;
-
-       for (i = 0; i < NVLAN; i++) {
-               struct ifnet *ifp = &ifv_softc[i].ifv_if;
-
-               ifp->if_softc = &ifv_softc[i];
-               ifp->if_name = "vlan";
-               ifp->if_family = APPLE_IF_FAM_VLAN;
-               ifp->if_unit = i;
-               /* NB: flags are not set here */
-               ifp->if_linkmib = &ifv_softc[i].ifv_mib;
-               ifp->if_linkmiblen = sizeof ifv_softc[i].ifv_mib;
-               /* NB: mtu is not set here */
-
-               ifp->if_init = vlan_ifinit;
-               ifp->if_start = vlan_start;
-               ifp->if_ioctl = vlan_ioctl;
-               ifp->if_output = ether_output;
-               ifp->if_snd.ifq_maxlen = ifqmaxlen;
-               if_attach(ifp);
-               ether_ifattach(ifp);
-#if NBPFILTER > 0
-               bpfattach(ifp, DLT_EN10MB, sizeof(struct ether_header));
-#endif
-               /* Now undo some of the damage... */
-               ifp->if_data.ifi_type = IFT_8021_VLAN;
-               ifp->if_data.ifi_hdrlen = EVL_ENCAPLEN;
-               ifp->if_resolvemulti = 0;
-       }
+vlan_clone_attach(void)
+{
+    if_clone_attach(&vlan_cloner);
+    return;
+}
+
+static int
+vlan_clone_create(struct if_clone *ifc, int unit)
+{
+    int error;
+    struct ifvlan *ifv;
+    struct ifnet *ifp;
+
+    ifv = _MALLOC(sizeof(struct ifvlan), M_VLAN, M_WAITOK);
+    bzero(ifv, sizeof(struct ifvlan));
+    SLIST_INIT(&ifv->vlan_mc_listhead);
+
+    /* use the interface name as the unique id for ifp recycle */
+    if (snprintf(ifv->ifv_name, sizeof(ifv->ifv_name), "%s%d",
+                ifc->ifc_name, unit) >= sizeof(ifv->ifv_name)) {
+       FREE(ifv, M_VLAN);
+       return (EINVAL);
+    }
+    error = dlil_if_acquire(APPLE_IF_FAM_VLAN,
+                           ifv->ifv_name,
+                           strlen(ifv->ifv_name),
+                           &ifp);
+    if (error) {
+       FREE(ifv, M_VLAN);
+       return (error);
+    }
+    ifv->ifv_ifp = ifp;
+    ifp->if_private = ifv;
+    ifp->if_name = (char *)ifc->ifc_name;
+    ifp->if_unit = unit;
+    ifp->if_family = APPLE_IF_FAM_VLAN;
+
+#if 0
+    /* NB: flags are not set here */
+    ifp->if_linkmib = &ifv->ifv_mib;
+    ifp->if_linkmiblen = sizeof ifv->ifv_mib;
+    /* NB: mtu is not set here */
+#endif 0
+
+    ifp->if_ioctl = vlan_ioctl;
+    ifp->if_set_bpf_tap = vlan_set_bpf_tap;
+    ifp->if_free = nop_if_free;
+    ifp->if_output = nop_if_output;
+    ifp->if_hwassist = 0;
+    ifp->if_addrlen = ETHER_ADDR_LEN; /* XXX ethernet specific */
+    ifp->if_baudrate = 0;
+    ifp->if_type = IFT_L2VLAN;
+    ifp->if_hdrlen = ETHER_VLAN_ENCAP_LEN;
+    error = dlil_if_attach(ifp);
+    if (error) {
+       dlil_if_release(ifp);
+       FREE(ifv, M_VLAN);
+       return (error);
+    }
+
+    /* attach as ethernet */
+    bpfattach(ifp, DLT_EN10MB, sizeof(struct ether_header));
+
+    VLAN_LOCK();
+    LIST_INSERT_HEAD(&ifv_list, ifv, ifv_list);
+    VLAN_UNLOCK();
+
+    return (0);
 }
 }
-PSEUDO_SET(vlaninit, if_vlan);
 
 static void
 
 static void
-vlan_ifinit(void *foo)
+vlan_remove(struct ifvlan * ifv)
 {
 {
-       return;
+    VLAN_LOCK_ASSERT();
+    ifv->ifv_detaching = 1;
+    vlan_unconfig(ifv->ifv_ifp);
+    LIST_REMOVE(ifv, ifv_list);
+    return;
 }
 
 static void
 }
 
 static void
-vlan_start(struct ifnet *ifp)
-{
-       struct ifvlan *ifv;
-       struct ifnet *p;
-       struct ether_vlan_header *evl;
-       struct mbuf *m;
-
-       ifv = ifp->if_softc;
-       p = ifv->ifv_p;
-
-       ifp->if_flags |= IFF_OACTIVE;
-       for (;;) {
-               IF_DEQUEUE(&ifp->if_snd, m);
-               if (m == 0)
-                       break;
-#if NBPFILTER > 0
-               if (ifp->if_bpf)
-                       bpf_mtap(ifp, m);
-#endif /* NBPFILTER > 0 */
-
-               /*
-                * If the LINK0 flag is set, it means the underlying interface
-                * can do VLAN tag insertion itself and doesn't require us to
-                * create a special header for it. In this case, we just pass
-                * the packet along. However, we need some way to tell the
-                * interface where the packet came from so that it knows how
-                * to find the VLAN tag to use, so we set the rcvif in the
-                * mbuf header to our ifnet.
-                *
-                * Note: we also set the M_PROTO1 flag in the mbuf to let
-                * the parent driver know that the rcvif pointer is really
-                * valid. We need to do this because sometimes mbufs will
-                * be allocated by other parts of the system that contain
-                * garbage in the rcvif pointer. Using the M_PROTO1 flag
-                * lets the driver perform a proper sanity check and avoid
-                * following potentially bogus rcvif pointers off into
-                * never-never land.
-                */
-               if (ifp->if_flags & IFF_LINK0) {
-                       m->m_pkthdr.rcvif = ifp;
-                       m->m_flags |= M_PROTO1;
-               } else {
-                       M_PREPEND(m, EVL_ENCAPLEN, M_DONTWAIT);
-                       if (m == 0)
-                               continue;
-                       /* M_PREPEND takes care of m_len, m_pkthdr.len for us */
-
-                       /*
-                        * Transform the Ethernet header into an Ethernet header
-                        * with 802.1Q encapsulation.
-                        */
-                       bcopy(mtod(m, char *) + EVL_ENCAPLEN, mtod(m, char *),
-                             sizeof(struct ether_header));
-                       evl = mtod(m, struct ether_vlan_header *);
-                       evl->evl_proto = evl->evl_encap_proto;
-                       evl->evl_encap_proto = htons(vlan_proto);
-                       evl->evl_tag = htons(ifv->ifv_tag);
-#ifdef DEBUG
-                       printf("vlan_start: %*D\n", sizeof *evl,
-                           (char *)evl, ":");
-#endif
-               }
+vlan_if_detach(struct ifnet * ifp)
+{
+    ifp->if_output = nop_if_output;
+    ifp->if_ioctl = nop_if_ioctl;
+    ifp->if_set_bpf_tap = &nop_if_bpf;
+    if (dlil_if_detach(ifp) == DLIL_WAIT_FOR_FREE) {
+       ifp->if_free = vlan_if_free;
+    } else {
+       vlan_if_free(ifp);
+    }
+    return;
+}
 
 
-               /*
-                * Send it, precisely as ether_output() would have.
-                * We are already running at splimp.
-                */
-               if (IF_QFULL(&p->if_snd)) {
-                       IF_DROP(&p->if_snd);
-                               /* XXX stats */
-                       ifp->if_oerrors++;
-                       m_freem(m);
-                       continue;
-               }
-               IF_ENQUEUE(&p->if_snd, m);
-               if ((p->if_flags & IFF_OACTIVE) == 0) {
-                       p->if_start(p);
-                       ifp->if_opackets++;
-               }
-       }
-       ifp->if_flags &= ~IFF_OACTIVE;
+static void
+vlan_clone_destroy(struct ifnet *ifp)
+{
+    struct ifvlan *ifv = ifp->if_private;
 
 
+    if (ifv == NULL || ifp->if_type != IFT_L2VLAN) {
+       return;
+    }
+    VLAN_LOCK();
+    if (ifv->ifv_detaching) {
+       VLAN_UNLOCK();
        return;
        return;
+    }
+    vlan_remove(ifv);
+    VLAN_UNLOCK();
+    vlan_if_detach(ifp);
+    return;
 }
 
 }
 
-void
-vlan_input_tag(struct ether_header *eh, struct mbuf *m, u_int16_t t)
+static int 
+vlan_set_bpf_tap(struct ifnet * ifp, int mode, bpf_callback_func * func)
 {
 {
-       int i;
-       struct ifvlan *ifv;
+    struct ifvlan *ifv = ifp->if_private;
 
 
-       for (i = 0; i < NVLAN; i++) {
-               ifv = &ifv_softc[i];
-               if (ifv->ifv_tag == t)
-                       break;
-       }
+    switch (mode) {
+        case BPF_TAP_DISABLE:
+            ifv->ifv_bpf_input = ifv->ifv_bpf_output = NULL;
+            break;
 
 
-       if (i >= NVLAN || (ifv->ifv_if.if_flags & IFF_UP) == 0) {
-               m_freem(m);
-               ifv->ifv_p->if_data.ifi_noproto++;
-               return;
-       }
+        case BPF_TAP_INPUT:
+            ifv->ifv_bpf_input = func;
+            break;
+
+        case BPF_TAP_OUTPUT:
+           ifv->ifv_bpf_output = func;
+            break;
+        
+        case BPF_TAP_INPUT_OUTPUT:
+            ifv->ifv_bpf_input = ifv->ifv_bpf_output = func;
+            break;
+        default:
+            break;
+    }
+    return 0;
+}
+
+static void
+vlan_ifinit(void *foo)
+{
+    return;
+}
+
+static int
+vlan_output(struct ifnet *ifp, struct mbuf *m)
+{
+    struct ifvlan *ifv;
+    struct ifnet *p;
+    struct ether_vlan_header *evl;
+    int soft_vlan;
 
 
+    ifv = ifp->if_private;
+    p = ifv->ifv_p;
+    if (p == NULL) {
+       return (nop_if_output(ifp, m));
+    }
+    if (m == 0) {
+       printf("%s: NULL output mbuf\n", ifv->ifv_name);
+       return (EINVAL);
+    }
+    if ((m->m_flags & M_PKTHDR) == 0) {
+       printf("%s: M_PKTHDR bit not set\n", ifv->ifv_name);
+       m_freem(m);
+       return (EINVAL);
+    }
+    ifp->if_obytes += m->m_pkthdr.len;
+    ifp->if_opackets++;
+    soft_vlan = (p->if_hwassist & IF_HWASSIST_VLAN_TAGGING) == 0;
+    vlan_bpf_output(ifp, m, ifv->ifv_bpf_output);
+
+    /* do not run parent's if_output() if the parent is not up */
+    if ((p->if_flags & (IFF_UP | IFF_RUNNING)) != (IFF_UP | IFF_RUNNING)) {
+       m_freem(m);
+       ifp->if_collisions++;
+       return (0);
+    }
+    /*
+     * If underlying interface can do VLAN tag insertion itself,
+     * just pass the packet along. However, we need some way to
+     * tell the interface where the packet came from so that it
+     * knows how to find the VLAN tag to use.  We use a field in
+     * the mbuf header to store the VLAN tag, and a bit in the
+     * csum_flags field to mark the field as valid.
+     */
+    if (soft_vlan == 0) {
+       m->m_pkthdr.csum_flags |= CSUM_VLAN_TAG_VALID;
+       m->m_pkthdr.vlan_tag = ifv->ifv_tag;
+    } else {
+       M_PREPEND(m, ifv->ifv_encaplen, M_DONTWAIT);
+       if (m == NULL) {
+           printf("%s: unable to prepend VLAN header\n", 
+                  ifv->ifv_name);
+           ifp->if_ierrors++;
+           return (0);
+       }
+       /* M_PREPEND takes care of m_len, m_pkthdr.len for us */
+       if (m->m_len < sizeof(*evl)) {
+           m = m_pullup(m, sizeof(*evl));
+           if (m == NULL) {
+               printf("%s: cannot pullup VLAN header\n",
+                      ifv->ifv_name);
+               ifp->if_ierrors++;
+               return (0);
+           }
+       }
+               
        /*
        /*
-        * Having found a valid vlan interface corresponding to
-        * the given source interface and vlan tag, run the
-        * the real packet through ethert_input().
+        * Transform the Ethernet header into an Ethernet header
+        * with 802.1Q encapsulation.
         */
         */
-       m->m_pkthdr.rcvif = &ifv->ifv_if;
-
-#if NBPFILTER > 0
-       if (ifv->ifv_if.if_bpf) {
-               /*
-                * Do the usual BPF fakery.  Note that we don't support
-                * promiscuous mode here, since it would require the
-                * drivers to know about VLANs and we're not ready for
-                * that yet.
-                */
-               struct mbuf m0;
-               m0.m_next = m;
-               m0.m_len = sizeof(struct ether_header);
-               m0.m_data = (char *)eh;
-               bpf_mtap(&ifv->ifv_if, &m0);
-       }
-#endif
-       ifv->ifv_if.if_ipackets++;
-       ether_input(&ifv->ifv_if, eh, m);
-       return;
+       bcopy(mtod(m, char *) + ifv->ifv_encaplen,
+             mtod(m, char *), ETHER_HDR_LEN);
+       evl = mtod(m, struct ether_vlan_header *);
+       evl->evl_proto = evl->evl_encap_proto;
+       evl->evl_encap_proto = htons(ETHERTYPE_VLAN);
+       evl->evl_tag = htons(ifv->ifv_tag);
+       m->m_pkthdr.len += ifv->ifv_encaplen;
+    }
+       
+    /*
+     * Send it, precisely as ether_output() would have.
+     * We are already running at splimp.
+     */
+    return ((*p->if_output)(p, m));
 }
 
 }
 
-int
-vlan_input(struct ether_header *eh, struct mbuf *m)
+extern int 
+vlan_demux(struct ifnet * ifp, struct mbuf * m, 
+          char * frame_header, struct if_proto * * proto)
 {
 {
-       int i;
-       struct ifvlan *ifv;
+    register struct ether_header *eh = (struct ether_header *)frame_header;
+    struct ether_vlan_header *evl;
+    struct ifvlan *ifv = NULL;
+    int soft_vlan = 0;
+    u_int tag;
 
 
-       for (i = 0; i < NVLAN; i++) {
-               ifv = &ifv_softc[i];
-               if (m->m_pkthdr.rcvif == ifv->ifv_p
-                   && (EVL_VLANOFTAG(ntohs(*mtod(m, u_int16_t *)))
-                       == ifv->ifv_tag))
-                       break;
-       }
+    if (m->m_pkthdr.csum_flags & CSUM_VLAN_TAG_VALID) {
+       /*
+        * Packet is tagged, m contains a normal
+        * Ethernet frame; the tag is stored out-of-band.
+        */
+       m->m_pkthdr.csum_flags &= ~CSUM_VLAN_TAG_VALID;
+       tag = EVL_VLANOFTAG(m->m_pkthdr.vlan_tag);
+       m->m_pkthdr.vlan_tag = 0;
+    } else {
+       soft_vlan = 1;
 
 
-       if (i >= NVLAN || (ifv->ifv_if.if_flags & IFF_UP) == 0) {
+       switch (ifp->if_type) {
+       case IFT_ETHER:
+           if (m->m_len < ETHER_VLAN_ENCAP_LEN) {
                m_freem(m);
                m_freem(m);
-               return -1;      /* so ether_input can take note */
-       }
+               return (EJUSTRETURN);
+           }
+           evl = (struct ether_vlan_header *)frame_header;
+           if (ntohs(evl->evl_proto) == ETHERTYPE_VLAN) {
+               /* don't allow VLAN within VLAN */
+               m_freem(m);
+               return (EJUSTRETURN);
+           }
+           tag = EVL_VLANOFTAG(ntohs(evl->evl_tag));
 
 
+           /*
+            * Restore the original ethertype.  We'll remove
+            * the encapsulation after we've found the vlan
+            * interface corresponding to the tag.
+            */
+           evl->evl_encap_proto = evl->evl_proto;
+           break;
+       default:
+           printf("vlan_demux: unsupported if type %u", 
+                  ifp->if_type);
+           m_freem(m);
+           return (EJUSTRETURN);
+           break;
+       }
+    }
+    if (tag != 0) {
+       if (ifp->if_nvlans == 0) {
+           /* don't bother looking through the VLAN list */
+           m_freem(m);
+           ifp->if_noproto++;
+           return (EJUSTRETURN);
+       }
+       VLAN_LOCK();
+       ifv = vlan_lookup_ifp_and_tag(ifp, tag);
+       if (ifv == NULL || (ifv->ifv_ifp->if_flags & IFF_UP) == 0) {
+           VLAN_UNLOCK();
+           m_freem(m);
+           ifp->if_noproto++;
+           return (EJUSTRETURN);
+       }
+       VLAN_UNLOCK();          /* XXX extend below? */
+    }
+    if (soft_vlan) {
        /*
        /*
-        * Having found a valid vlan interface corresponding to
-        * the given source interface and vlan tag, remove the
-        * encapsulation, and run the real packet through
-        * ether_input() a second time (it had better be
-        * reentrant!).
+        * Packet had an in-line encapsulation header;
+        * remove it.  The original header has already
+        * been fixed up above.
         */
         */
-       m->m_pkthdr.rcvif = &ifv->ifv_if;
-       eh->ether_type = mtod(m, u_int16_t *)[1];
-       m->m_data += EVL_ENCAPLEN;
-       m->m_len -= EVL_ENCAPLEN;
-       m->m_pkthdr.len -= EVL_ENCAPLEN;
-
-#if NBPFILTER > 0
-       if (ifv->ifv_if.if_bpf) {
-               /*
-                * Do the usual BPF fakery.  Note that we don't support
-                * promiscuous mode here, since it would require the
-                * drivers to know about VLANs and we're not ready for
-                * that yet.
-                */
-               struct mbuf m0;
-               m0.m_next = m;
-               m0.m_len = sizeof(struct ether_header);
-               m0.m_data = (char *)eh;
-               bpf_mtap(&ifv->ifv_if, &m0);
-       }
-#endif
-       ifv->ifv_if.if_ipackets++;
-       ether_input(&ifv->ifv_if, eh, m);
-       return 0;
+       m->m_len -= ETHER_VLAN_ENCAP_LEN;
+       m->m_data += ETHER_VLAN_ENCAP_LEN;
+       m->m_pkthdr.len -= ETHER_VLAN_ENCAP_LEN;
+       m->m_pkthdr.csum_flags = 0; /* can't trust hardware checksum */
+    }
+    if (tag != 0) {
+       /* we found a vlan interface above, so send it up */
+       m->m_pkthdr.rcvif = ifv->ifv_ifp;
+       ifv->ifv_ifp->if_ipackets++;
+       ifv->ifv_ifp->if_ibytes += m->m_pkthdr.len;
+
+       vlan_bpf_input(ifv->ifv_ifp, m, ifv->ifv_bpf_input, frame_header,
+                      ETHER_HDR_LEN, soft_vlan ? ETHER_VLAN_ENCAP_LEN : 0);
+
+       /* Pass it back through the parent's demux routine. */
+       return ((*ifp->if_demux)(ifv->ifv_ifp, m, frame_header, proto));
+    }
+    /* Pass it back through calling demux routine. */
+    return ((*ifp->if_demux)(ifp, m, frame_header, proto));
 }
 
 static int
 }
 
 static int
-vlan_config(struct ifvlan *ifv, struct ifnet *p)
+vlan_config(struct ifvlan *ifv, struct ifnet *p, int tag)
 {
 {
-       struct ifaddr *ifa1, *ifa2;
-       struct sockaddr_dl *sdl1, *sdl2;
+    struct ifnet * ifp;
+    struct ifaddr *ifa1, *ifa2;
+    struct sockaddr_dl *sdl1, *sdl2;
+    int supports_vlan_mtu = 0;
 
 
-       if (p->if_data.ifi_type != IFT_ETHER)
-               return EPROTONOSUPPORT;
-       if (ifv->ifv_p)
-               return EBUSY;
-       ifv->ifv_p = p;
-       if (p->if_data.ifi_hdrlen == sizeof(struct ether_vlan_header))
-               ifv->ifv_if.if_mtu = p->if_mtu;
-       else
-               ifv->ifv_if.if_mtu = p->if_data.ifi_mtu - EVL_ENCAPLEN;
+    VLAN_LOCK_ASSERT();
+    if (p->if_data.ifi_type != IFT_ETHER)
+       return EPROTONOSUPPORT;
+    if (ifv->ifv_p != NULL || ifv->ifv_detaching) {
+       return EBUSY;
+    }
+    if (vlan_lookup_ifp_and_tag(p, tag) != NULL) {
+       /* already a VLAN with that tag on this interface */
+       return (EADDRINUSE);
+    }
+    ifp = ifv->ifv_ifp;
+    ifv->ifv_encaplen = ETHER_VLAN_ENCAP_LEN;
+    ifv->ifv_mintu = ETHERMIN;
+    ifv->ifv_flags = 0;
 
 
-       /*
-        * Preserve the state of the LINK0 flag for ourselves.
-        */
-       ifv->ifv_if.if_flags = (p->if_flags & ~(IFF_LINK0));
+    /*
+     * If the parent supports the VLAN_MTU capability,
+     * i.e. can Tx/Rx larger than ETHER_MAX_LEN frames,
+     * enable it.
+     */
+    if (p->if_hwassist & (IF_HWASSIST_VLAN_MTU | IF_HWASSIST_VLAN_TAGGING)) {
+       supports_vlan_mtu = 1;
+    }
+    if (p->if_nvlans == 0) {
+       u_long  dltag;
+       u_long  filter_id;
+       int     error;
+
+       /* attach our VLAN "interface filter" to the interface */
+       error = vlan_attach_filter(p, &filter_id);
+       if (error) {
+           return (error);
+       }
+
+       /* attach our VLAN "protocol" to the interface */
+       error = vlan_attach_protocol(p);
+       if (error) {
+           (void)vlan_detach_filter(filter_id);
+           return (error);
+       }
+       ifv->ifv_filter_id = filter_id;
+       ifv->ifv_filter_valid = TRUE;
+#if 0
+       if (supports_vlan_mtu) {
+           /*
+            * Enable Tx/Rx of VLAN-sized frames.
+            */
+           p->if_capenable |= IFCAP_VLAN_MTU;
+           if (p->if_flags & IFF_UP) {
+               struct ifreq ifr;
+               int error;
+               
+               ifr.ifr_flags = p->if_flags;
+               error = (*p->if_ioctl)(p, SIOCSIFFLAGS,
+                                      (caddr_t) &ifr);
+               if (error) {
+                   if (p->if_nvlans == 0)
+                       p->if_capenable &= ~IFCAP_VLAN_MTU;
+                   return (error);
+               }
+           }
+       }
+#endif 0
+    } else {
+       struct ifvlan *         other_ifv;
 
 
+       other_ifv = vlan_lookup_ifp(p);
+       if (other_ifv == NULL) {
+           printf("vlan: other_ifv can't be NULL\n");
+           return (EINVAL);
+       }
+       ifv->ifv_filter_id = other_ifv->ifv_filter_id;
+       ifv->ifv_filter_valid = TRUE;
+    }
+    p->if_nvlans++;
+    if (supports_vlan_mtu) {
+       ifv->ifv_mtufudge = 0;
+    } else {
        /*
        /*
-        * Set up our ``Ethernet address'' to reflect the underlying
-        * physical interface's.
+        * Fudge the MTU by the encapsulation size.  This
+        * makes us incompatible with strictly compliant
+        * 802.1Q implementations, but allows us to use
+        * the feature with other NetBSD implementations,
+        * which might still be useful.
         */
         */
-       ifa1 = ifnet_addrs[ifv->ifv_if.if_index - 1];
-       ifa2 = ifnet_addrs[p->if_index - 1];
-       sdl1 = (struct sockaddr_dl *)ifa1->ifa_addr;
-       sdl2 = (struct sockaddr_dl *)ifa2->ifa_addr;
-       sdl1->sdl_type = IFT_ETHER;
-       sdl1->sdl_alen = ETHER_ADDR_LEN;
-       bcopy(LLADDR(sdl2), LLADDR(sdl1), ETHER_ADDR_LEN);
-       bcopy(LLADDR(sdl2), ifv->ifv_ac.ac_enaddr, ETHER_ADDR_LEN);
-       return 0;
+       ifv->ifv_mtufudge = ifv->ifv_encaplen;
+    }
+
+    ifv->ifv_p = p;
+    ifp->if_mtu = p->if_mtu - ifv->ifv_mtufudge;
+    /*
+     * Copy only a selected subset of flags from the parent.
+     * Other flags are none of our business.
+     */
+    ifp->if_flags |= (p->if_flags &
+                     (IFF_BROADCAST | IFF_MULTICAST | IFF_SIMPLEX));
+    /*
+     * If the parent interface can do hardware-assisted
+     * VLAN encapsulation, then propagate its hardware-
+     * assisted checksumming flags.
+     */
+    if (p->if_hwassist & IF_HWASSIST_VLAN_TAGGING) {
+       ifp->if_hwassist |= IF_HWASSIST_CSUM_FLAGS(p->if_hwassist);
+    }
+    /*
+     * Set up our ``Ethernet address'' to reflect the underlying
+     * physical interface's.
+     */
+    ifa1 = ifaddr_byindex(ifp->if_index);
+    ifa2 = ifaddr_byindex(p->if_index);
+    sdl1 = (struct sockaddr_dl *)ifa1->ifa_addr;
+    sdl2 = (struct sockaddr_dl *)ifa2->ifa_addr;
+    sdl1->sdl_type = IFT_ETHER;
+    sdl1->sdl_alen = ETHER_ADDR_LEN;
+    bcopy(LLADDR(sdl2), LLADDR(sdl1), ETHER_ADDR_LEN);
+    bcopy(LLADDR(sdl2), IFP2AC(ifp)->ac_enaddr, ETHER_ADDR_LEN);
+
+    /*
+     * Configure multicast addresses that may already be
+     * joined on the vlan device.
+     */
+    (void)vlan_setmulti(ifp);
+    ifp->if_output = vlan_output;
+    ifv->ifv_tag = tag;
+
+    return 0;
+}
+
+static void
+vlan_link_event(struct ifnet * ifp, struct ifnet * p)
+{
+    struct ifmediareq ifmr;
+
+    /* generate a link event based on the state of the underlying interface */
+    bzero(&ifmr, sizeof(ifmr));
+    snprintf(ifmr.ifm_name, sizeof(ifmr.ifm_name),
+            "%s%d", p->if_name, p->if_unit);
+    if ((*p->if_ioctl)(p, SIOCGIFMEDIA, (caddr_t)&ifmr) == 0
+       && ifmr.ifm_count > 0 && ifmr.ifm_status & IFM_AVALID) {
+       u_long  event;
+       
+       event = (ifmr.ifm_status & IFM_ACTIVE)
+           ? KEV_DL_LINK_ON : KEV_DL_LINK_OFF;
+       interface_link_event(ifp, event);
+    }
+    return;
 }
 
 static int
 vlan_unconfig(struct ifnet *ifp)
 {
 }
 
 static int
 vlan_unconfig(struct ifnet *ifp)
 {
-       struct ifaddr *ifa;
-       struct sockaddr_dl *sdl;
-       struct vlan_mc_entry *mc;
-       struct ifvlan *ifv;
-       struct ifnet *p;
-       int error;
+    struct ifaddr *ifa;
+    struct sockaddr_dl *sdl;
+    struct vlan_mc_entry *mc;
+    struct ifvlan *ifv;
+    struct ifnet *p;
+    int error;
+
+    VLAN_LOCK_ASSERT();
+
+    ifv = ifp->if_private;
 
 
-       ifv = ifp->if_softc;
-       p = ifv->ifv_p;
+    /* Disconnect from parent. */
+    p = ifv->ifv_p;
+    ifv->ifv_p = NULL;
+
+    if (p != NULL) {
+       struct sockaddr_dl sdl;
 
        /*
 
        /*
-        * Since the interface is being unconfigured, we need to
+        * Since the interface is being unconfigured, we need to
         * empty the list of multicast groups that we may have joined
         * empty the list of multicast groups that we may have joined
-        * while we were alive and remove them from the parent's list
-        * as well.
+        * while we were alive from the parent's list.
         */
         */
-       while(ifv->vlan_mc_listhead.slh_first != NULL) {
-               struct sockaddr_dl      sdl;
-
-               sdl.sdl_len = ETHER_ADDR_LEN;
-               sdl.sdl_family = AF_LINK;
-               mc = ifv->vlan_mc_listhead.slh_first;
-               bcopy((char *)&mc->mc_addr, LLADDR(&sdl), ETHER_ADDR_LEN);
-               error = if_delmulti(p, (struct sockaddr *)&sdl);
-               error = if_delmulti(ifp, (struct sockaddr *)&sdl);
-               if (error)
-                       return(error);
-               SLIST_REMOVE_HEAD(&ifv->vlan_mc_listhead, mc_entries);
-               FREE(mc, M_DEVBUF);
+       bzero((char *)&sdl, sizeof sdl);
+       sdl.sdl_len = sizeof sdl;
+       sdl.sdl_family = AF_LINK;
+       sdl.sdl_index = p->if_index;
+       sdl.sdl_type = IFT_ETHER;
+       sdl.sdl_alen = ETHER_ADDR_LEN;
+
+       while (SLIST_FIRST(&ifv->vlan_mc_listhead) != NULL) {
+           mc = SLIST_FIRST(&ifv->vlan_mc_listhead);
+           bcopy((char *)&mc->mc_addr, LLADDR(&sdl), ETHER_ADDR_LEN);
+           error = if_delmulti(p, (struct sockaddr *)&sdl);
+           if (error) {
+               printf("vlan_unconfig: if_delmulti %s failed, %d\n", 
+                      ifv->ifv_name, error);
+           }
+           SLIST_REMOVE_HEAD(&ifv->vlan_mc_listhead, mc_entries);
+           FREE(mc, M_VLAN);
+       }
+       p->if_nvlans--;
+       if (p->if_nvlans == 0) {
+           /* detach our VLAN "protocol" from the interface */
+           if (ifv->ifv_filter_valid) {
+               (void)vlan_detach_filter(ifv->ifv_filter_id);
+           }
+           (void)vlan_detach_protocol(p);
+#if 0
+           /*
+            * Disable Tx/Rx of VLAN-sized frames.
+            */
+           p->if_capenable &= ~IFCAP_VLAN_MTU;
+           if (p->if_flags & IFF_UP) {
+               struct ifreq ifr;
+               
+               ifr.ifr_flags = p->if_flags;
+               (*p->if_ioctl)(p, SIOCSIFFLAGS, (caddr_t) &ifr);
+           }
+#endif 0
        }
        }
+    }
 
 
-       /* Disconnect from parent. */
-       ifv->ifv_p = NULL;
-       ifv->ifv_if.if_mtu = ETHERMTU;
+    /* return to the state we were in before SETVLAN */
+    ifp->if_mtu = 0;
+    ifp->if_flags &= ~(IFF_BROADCAST | IFF_MULTICAST 
+                      | IFF_SIMPLEX | IFF_RUNNING);
+    ifv->ifv_ifp->if_hwassist = 0;
+    ifv->ifv_flags = 0;
+    ifv->ifv_ifp->if_output = nop_if_output;
+    ifv->ifv_mtufudge = 0;
+    ifv->ifv_filter_valid = FALSE;
 
 
-       /* Clear our MAC address. */
-       ifa = ifnet_addrs[ifv->ifv_if.if_index - 1];
-       sdl = (struct sockaddr_dl *)ifa->ifa_addr;
-       sdl->sdl_type = IFT_ETHER;
-       sdl->sdl_alen = ETHER_ADDR_LEN;
-       bzero(LLADDR(sdl), ETHER_ADDR_LEN);
-       bzero(ifv->ifv_ac.ac_enaddr, ETHER_ADDR_LEN);
+    /* Clear our MAC address. */
+    ifa = ifaddr_byindex(ifv->ifv_ifp->if_index);
+    sdl = (struct sockaddr_dl *)(ifa->ifa_addr);
+    sdl->sdl_type = IFT_L2VLAN;
+    sdl->sdl_alen = 0;
+    bzero(LLADDR(sdl), ETHER_ADDR_LEN);
+    bzero(IFP2AC(ifv->ifv_ifp)->ac_enaddr, ETHER_ADDR_LEN);
 
 
-       return 0;
+    /* send a link down event */
+    if (p != NULL) {
+       interface_link_event(ifv->ifv_ifp, KEV_DL_LINK_OFF);
+    }
+    return 0;
 }
 
 static int
 }
 
 static int
-vlan_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
-{
-       struct ifaddr *ifa;
-       struct ifnet *p;
-       struct ifreq *ifr;
-       struct ifvlan *ifv;
-       struct vlanreq vlr;
-       int error = 0;
-
-       ifr = (struct ifreq *)data;
-       ifa = (struct ifaddr *)data;
-       ifv = ifp->if_softc;
-
-       switch (cmd) {
-       case SIOCSIFADDR:
-               ifp->if_flags |= IFF_UP;
-
-               switch (ifa->ifa_addr->sa_family) {
-#if INET
-               case AF_INET:
-                       arp_ifinit(&ifv->ifv_ac, ifa);
-                       break;
-#endif
-               default:
-                       break;
-               }
-               break;
+vlan_set_promisc(struct ifnet *ifp)
+{
+    struct ifvlan *ifv = ifp->if_private;
+    int error = 0;
 
 
-       case SIOCGIFADDR:
-               {
-                       struct sockaddr *sa;
+    if ((ifp->if_flags & IFF_PROMISC) != 0) {
+       if ((ifv->ifv_flags & IFVF_PROMISC) == 0) {
+           error = ifpromisc(ifv->ifv_p, 1);
+           if (error == 0)
+               ifv->ifv_flags |= IFVF_PROMISC;
+       }
+    } else {
+       if ((ifv->ifv_flags & IFVF_PROMISC) != 0) {
+           error = ifpromisc(ifv->ifv_p, 0);
+           if (error == 0)
+               ifv->ifv_flags &= ~IFVF_PROMISC;
+       }
+    }
 
 
-                       sa = (struct sockaddr *) &ifr->ifr_data;
-                       bcopy(((struct arpcom *)ifp->if_softc)->ac_enaddr,
-                             (caddr_t) sa->sa_data, ETHER_ADDR_LEN);
-               }
-               break;
-
-       case SIOCSIFMTU:
-               /*
-                * Set the interface MTU.
-                * This is bogus. The underlying interface might support
-                * jumbo frames.
-                */
-               if (ifr->ifr_mtu > ETHERMTU) {
-                       error = EINVAL;
-               } else {
-                       ifp->if_mtu = ifr->ifr_mtu;
-               }
-               break;
-
-       case SIOCSETVLAN:
-               error = copyin(ifr->ifr_data, &vlr, sizeof vlr);
-               if (error)
-                       break;
-               if (vlr.vlr_parent[0] == '\0') {
-                       vlan_unconfig(ifp);
-                       if_down(ifp);
-                       ifp->if_flags = 0;
-                       break;
-               }
-               p = ifunit(vlr.vlr_parent);
-               if (p == 0) {
-                       error = ENOENT;
-                       break;
+    return (error);
+}
+
+static int
+vlan_ioctl(struct ifnet *ifp, u_long cmd, void * data)
+{
+    struct ifaddr *ifa;
+    struct ifnet *p;
+    struct ifreq *ifr;
+    struct ifvlan *ifv;
+    struct vlanreq vlr;
+    int error = 0;
+
+    ifr = (struct ifreq *)data;
+    ifa = (struct ifaddr *)data;
+    ifv = (struct ifvlan *)ifp->if_private;
+
+    switch (cmd) {
+    case SIOCSIFADDR:
+       ifp->if_flags |= IFF_UP;
+       break;
+
+    case SIOCGIFMEDIA:
+       VLAN_LOCK();
+       if (ifv->ifv_p != NULL) {
+           error = (*ifv->ifv_p->if_ioctl)(ifv->ifv_p,
+                                           SIOCGIFMEDIA, data);
+           VLAN_UNLOCK();
+           /* Limit the result to the parent's current config. */
+           if (error == 0) {
+               struct ifmediareq *ifmr;
+
+               ifmr = (struct ifmediareq *) data;
+               if (ifmr->ifm_count >= 1 && ifmr->ifm_ulist) {
+                   ifmr->ifm_count = 1;
+                   error = copyout(&ifmr->ifm_current,
+                                   ifmr->ifm_ulist, 
+                                   sizeof(int));
                }
                }
-               error = vlan_config(ifv, p);
-               if (error)
-                       break;
-               ifv->ifv_tag = vlr.vlr_tag;
-               break;
+           }
+       } else {
+           struct ifmediareq *ifmr;
+           VLAN_UNLOCK();
+           
+           ifmr = (struct ifmediareq *) data;
+           ifmr->ifm_current = 0;
+           ifmr->ifm_mask = 0;
+           ifmr->ifm_status = IFM_AVALID;
+           ifmr->ifm_active = 0;
+           ifmr->ifm_count = 1;
+           if (ifmr->ifm_ulist) {
+               error = copyout(&ifmr->ifm_current,
+                               ifmr->ifm_ulist, 
+                               sizeof(int));
+           }
+           error = 0;
+       }
+       break;
+
+    case SIOCSIFMEDIA:
+       error = EINVAL;
+       break;
+
+    case SIOCSIFMTU:
+       /*
+        * Set the interface MTU.
+        */
+       VLAN_LOCK();
+       if (ifv->ifv_p != NULL) {
+           if (ifr->ifr_mtu > (ifv->ifv_p->if_mtu - ifv->ifv_mtufudge)
+               || ifr->ifr_mtu < (ifv->ifv_mintu - ifv->ifv_mtufudge)) {
+               error = EINVAL;
+           } else {
+               ifp->if_mtu = ifr->ifr_mtu;
+           }
+       } else {
+           error = EINVAL;
+       }
+       VLAN_UNLOCK();
+       break;
+
+    case SIOCSETVLAN:
+       error = copyin(ifr->ifr_data, &vlr, sizeof(vlr));
+       if (error)
+           break;
+       if (vlr.vlr_parent[0] == '\0') {
+           VLAN_LOCK();
+           vlan_unconfig(ifp);
+#if 0
+           if (ifp->if_flags & IFF_UP)
+               if_down(ifp);
+           ifp->if_flags &= ~IFF_RUNNING;
+#endif 0
+           VLAN_UNLOCK();
+           break;
+       }
+       p = ifunit(vlr.vlr_parent);
+       if (p == 0) {
+           error = ENOENT;
+           break;
+       }
+       /*
+        * Don't let the caller set up a VLAN tag with
+        * anything except VLID bits.
+        */
+       if (vlr.vlr_tag & ~EVL_VLID_MASK) {
+           error = EINVAL;
+           break;
+       }
+       VLAN_LOCK();
+       error = vlan_config(ifv, p, vlr.vlr_tag);
+       if (error) {
+           VLAN_UNLOCK();
+           break;
+       }
+       ifp->if_flags |= IFF_RUNNING;
+       VLAN_UNLOCK();
+
+       /* Update promiscuous mode, if necessary. */
+       vlan_set_promisc(ifp);
+
+       /* generate a link event */
+       vlan_link_event(ifp, p);
+       break;
                
                
-       case SIOCGETVLAN:
-               bzero(&vlr, sizeof vlr);
-               if (ifv->ifv_p) {
-                       snprintf(vlr.vlr_parent, sizeof(vlr.vlr_parent),
-                           "%s%d", ifv->ifv_p->if_name, ifv->ifv_p->if_unit);
-                       vlr.vlr_tag = ifv->ifv_tag;
-               }
-               error = copyout(&vlr, ifr->ifr_data, sizeof vlr);
-               break;
+    case SIOCGETVLAN:
+       bzero(&vlr, sizeof vlr);
+       VLAN_LOCK();
+       if (ifv->ifv_p != NULL) {
+           snprintf(vlr.vlr_parent, sizeof(vlr.vlr_parent),
+                    "%s%d", ifv->ifv_p->if_name, 
+                    ifv->ifv_p->if_unit);
+           vlr.vlr_tag = ifv->ifv_tag;
+       }
+       VLAN_UNLOCK();
+       error = copyout(&vlr, ifr->ifr_data, sizeof vlr);
+       break;
                
                
-       case SIOCSIFFLAGS:
-               /*
-                * We don't support promiscuous mode
-                * right now because it would require help from the
-                * underlying drivers, which hasn't been implemented.
-                */
-               if (ifr->ifr_flags & (IFF_PROMISC)) {
-                       ifp->if_flags &= ~(IFF_PROMISC);
-                       error = EINVAL;
-               }
-               break;
-       case SIOCADDMULTI:
-       case SIOCDELMULTI:
-               error = vlan_setmulti(ifp);
-               break;
-       default:
-               error = EINVAL;
+    case SIOCSIFFLAGS:
+       /*
+        * For promiscuous mode, we enable promiscuous mode on
+        * the parent if we need promiscuous on the VLAN interface.
+        */
+       if (ifv->ifv_p != NULL)
+           error = vlan_set_promisc(ifp);
+       break;
+
+    case SIOCADDMULTI:
+    case SIOCDELMULTI:
+       error = vlan_setmulti(ifp);
+       break;
+    default:
+       error = EOPNOTSUPP;
+    }
+    return error;
+}
+
+static int 
+nop_if_ioctl(struct ifnet * ifp, u_long cmd, void * data)
+{
+    return EOPNOTSUPP;
+}
+
+static int 
+nop_if_bpf(struct ifnet *ifp, int mode, bpf_callback_func * func)
+{
+    return ENODEV;
+}
+
+static int 
+nop_if_free(struct ifnet * ifp)
+{
+    return 0;
+}
+
+static int 
+nop_if_output(struct ifnet * ifp, struct mbuf * m)
+{
+    if (m != NULL) {
+       m_freem_list(m);
+    }
+    return 0;
+}
+
+static int 
+vlan_if_free(struct ifnet * ifp)
+{
+    struct ifvlan *ifv;
+
+    if (ifp == NULL) {
+       return 0;
+    }
+    ifv = (struct ifvlan *)ifp->if_private;
+    if (ifv == NULL) {
+       return 0;
+    }
+    ifp->if_private = NULL;
+    dlil_if_release(ifp);
+    FREE(ifv, M_VLAN);
+    return 0;
+}
+
+/*
+ * Function: vlan_if_filter_detach
+ * Purpose:
+ *   Destroy all vlan interfaces that refer to the interface
+ */
+static int
+vlan_if_filter_detach(caddr_t cookie)
+{
+    struct ifnet *     ifp;
+    struct ifvlan *    ifv;
+    struct ifnet *     p = (struct ifnet *)cookie;
+
+    VLAN_LOCK();
+    while (TRUE) {
+       ifv = vlan_lookup_ifp(p);
+       if (ifv == NULL) {
+           break;
+       }
+       if (ifv->ifv_detaching) {
+           continue;
+       }
+       /* make sure we don't invoke vlan_detach_filter */
+       ifv->ifv_filter_valid = FALSE;
+       vlan_remove(ifv);
+       ifp = ifv->ifv_ifp;
+       VLAN_UNLOCK();
+       vlan_if_detach(ifp);
+       VLAN_LOCK();
+    }
+    VLAN_UNLOCK();
+    return (0);
+}
+
+/*
+ * Function: vlan_attach_filter
+ * Purpose:
+ *   We attach an interface filter to detect when the underlying interface
+ *   goes away.  We are forced to do that because dlil does not call our
+ *   protocol's dl_event function for KEV_DL_IF_DETACHING.
+ */
+
+static int
+vlan_attach_filter(struct ifnet * ifp, u_long * filter_id)
+{
+    int                                error;
+    struct dlil_if_flt_str     filt;
+
+    bzero(&filt, sizeof(filt));
+    filt.filter_detach = vlan_if_filter_detach;
+    filt.cookie = (caddr_t)ifp;
+    error = dlil_attach_interface_filter(ifp, &filt, filter_id, 
+                                        DLIL_LAST_FILTER);
+    if (error) {
+       printf("vlan: dlil_attach_interface_filter(%s%d) failed, %d\n",
+              ifp->if_name, ifp->if_unit, error);
+    }
+    return (error);
+}
+
+/*
+ * Function: vlan_detach_filter
+ * Purpose:
+ *   Remove our interface filter.
+ */
+static int
+vlan_detach_filter(u_long filter_id)
+{
+    int        error;
+
+    error = dlil_detach_filter(filter_id);
+    if (error) {
+       printf("vlan: dlil_detach_filter failed, %d\n", error);
+    }
+    return (error);
+}
+
+/*
+ * Function: vlan_proto_input
+ * Purpose:
+ *   This function is never called.  We aren't allowed to leave the
+ *   function pointer NULL, so this function simply free's the mbuf.
+ */
+static int
+vlan_proto_input(m, frame_header, ifp, dl_tag, sync_ok)
+    struct mbuf  *m;
+    char         *frame_header;
+    struct ifnet *ifp;
+    u_long          dl_tag;
+    int          sync_ok;
+{
+    m_freem(m);
+    return (EJUSTRETURN);
+}
+
+static struct ifnet *
+find_if_name_unit(const char * if_name, int unit)
+{
+    struct ifnet * ifp;
+    
+    TAILQ_FOREACH(ifp, &ifnet, if_link) {
+       if (strcmp(if_name, ifp->if_name) == 0 && unit == ifp->if_unit) {
+           return (ifp);
+       }
+    }
+    return (ifp);
+}
+
+static void
+interface_link_event(struct ifnet * ifp, u_long event_code)
+{
+    struct {
+       struct kern_event_msg   header;
+       u_long                  unit;
+       char                    if_name[IFNAMSIZ];
+    } event;
+
+    event.header.total_size    = sizeof(event);
+    event.header.vendor_code   = KEV_VENDOR_APPLE;
+    event.header.kev_class     = KEV_NETWORK_CLASS;
+    event.header.kev_subclass  = KEV_DL_SUBCLASS;
+    event.header.event_code    = event_code;
+    event.header.event_data[0] = ifp->if_family;
+    event.unit                 = (u_long) ifp->if_unit;
+    strncpy(event.if_name, ifp->if_name, IFNAMSIZ);
+    dlil_event(ifp, &event.header);
+    return;
+}
+
+static void
+parent_link_event(struct ifnet * p, u_long event_code)
+{
+    struct ifvlan * ifv;
+
+    LIST_FOREACH(ifv, &ifv_list, ifv_list) {
+       if (p == ifv->ifv_p) {
+           interface_link_event(ifv->ifv_ifp, event_code);
+       }
+    }
+    return;
+
+}
+
+/* 
+ * Function: vlan_dl_event
+ * Purpose:
+ *   Process DLIL events that interest us.  Currently, that is
+ *   just the interface UP and DOWN.  Ideally, this would also
+ *   include the KEV_DL_IF_DETACH{ING} messages, which would eliminate
+ *   the need for an interface filter.
+ */
+static int
+vlan_dl_event(struct kern_event_msg * event, u_long dl_tag)
+{
+    struct ifnet *             p;
+    struct net_event_data *    net_event;
+
+    if (event->vendor_code != KEV_VENDOR_APPLE
+       || event->kev_class != KEV_NETWORK_CLASS
+       || event->kev_subclass != KEV_DL_SUBCLASS) {
+       goto done;
+    }
+    net_event = (struct net_event_data *)(event->event_data);
+    switch (event->event_code) {
+    case KEV_DL_LINK_OFF:
+    case KEV_DL_LINK_ON:
+       p = find_if_name_unit(net_event->if_name, net_event->if_unit);
+       if (p != NULL) {
+           parent_link_event(p, event->event_code);
        }
        }
-       return error;
+       break;
+#if 0
+    case KEV_DL_IF_DETACHING:
+    case KEV_DL_IF_DETACHED:
+       /* we don't get these, unfortunately */
+       break;
+#endif 0
+    default:
+       break;
+    }
+
+ done:
+    return (0);
+}
+
+/*
+ * Function: vlan_attach_protocol
+ * Purpose:
+ *   Attach a DLIL protocol to the interface, using the ETHERTYPE_VLAN
+ *   demux ether type.  We're not a real protocol, we'll never receive
+ *   any packets because they're intercepted by ether_demux before 
+ *   our input routine would be called.
+ *
+ *   The reasons for attaching a protocol to the interface are:
+ *   1) add a protocol reference to the interface so that the underlying
+ *      interface automatically gets marked up while we're attached
+ *   2) receive link status events which we can propagate to our
+ *      VLAN interfaces.
+ */
+static int
+vlan_attach_protocol(struct ifnet *ifp)
+{
+    struct dlil_demux_desc      desc;
+    u_long                     dl_tag;
+    u_short                    en_native = ETHERTYPE_VLAN;
+    int                        error;
+    int                        i;
+    struct dlil_proto_reg_str   reg;
+
+    TAILQ_INIT(&reg.demux_desc_head);
+    desc.type = DLIL_DESC_RAW;
+    desc.variants.bitmask.proto_id_length = 0;
+    desc.variants.bitmask.proto_id = 0;
+    desc.variants.bitmask.proto_id_mask = 0;
+    desc.native_type = (char *) &en_native;
+    TAILQ_INSERT_TAIL(&reg.demux_desc_head, &desc, next);
+    reg.interface_family = ifp->if_family;
+    reg.unit_number      = ifp->if_unit;
+    reg.input            = vlan_proto_input;
+    reg.pre_output       = 0;
+    reg.event            = vlan_dl_event;
+    reg.offer            = 0;
+    reg.ioctl            = 0;
+    reg.default_proto    = 0;
+    reg.protocol_family  = VLAN_PROTO_FAMILY;
+
+    error = dlil_attach_protocol(&reg, &dl_tag);
+    if (error) {
+       printf("vlan_proto_attach(%s%d) dlil_attach_protocol failed, %d\n",
+              ifp->if_name, ifp->if_unit, error);
+    }
+    return (error);
+}
+
+/*
+ * Function: vlan_detach_protocol
+ * Purpose:
+ *   Detach our DLIL protocol from an interface
+ */
+static int
+vlan_detach_protocol(struct ifnet *ifp)
+{
+    u_long     dl_tag;
+    int         error;
+
+    error = dlil_find_dltag(ifp->if_family, ifp->if_unit, 
+                           VLAN_PROTO_FAMILY, &dl_tag);
+    if (error) {
+       printf("vlan_proto_detach(%s%d) dlil_find_dltag failed, %d\n",
+              ifp->if_name, ifp->if_unit, error);
+    } else {
+        error = dlil_detach_protocol(dl_tag);
+       if (error) {
+           printf("vlan_proto_detach(%s%d) dlil_detach_protocol failed, %d\n",
+                  ifp->if_name, ifp->if_unit, error);
+       }
+    }
+    return (error);
+}
+
+/*
+ * DLIL interface family functions
+ *   We use the ethernet dlil functions, since that's all we support.
+ *   If we wanted to handle multiple LAN types (tokenring, etc.), we'd
+ *   call the appropriate routines for that LAN type instead of hard-coding
+ *   ethernet.
+ */
+extern int ether_add_if(struct ifnet *ifp);
+extern int ether_del_if(struct ifnet *ifp);
+extern int ether_init_if(struct ifnet *ifp);
+extern int ether_add_proto(struct ddesc_head_str *desc_head, 
+                          struct if_proto *proto, u_long dl_tag);
+extern int ether_del_proto(struct if_proto *proto, u_long dl_tag);
+extern int ether_ifmod_ioctl(struct ifnet *ifp, u_long command,
+                            caddr_t data);
+extern int ether_del_proto(struct if_proto *proto, u_long dl_tag);
+extern int ether_add_proto(struct ddesc_head_str *desc_head, struct if_proto *proto, u_long dl_tag);
+
+extern int ether_attach_inet(struct ifnet *ifp, u_long *dl_tag);
+extern int ether_detach_inet(struct ifnet *ifp, u_long dl_tag);
+extern int ether_attach_inet6(struct ifnet *ifp, u_long *dl_tag);
+extern int ether_detach_inet6(struct ifnet *ifp, u_long dl_tag);
+
+static int
+vlan_attach_inet(struct ifnet *ifp, u_long *dl_tag)
+{
+    return (ether_attach_inet(ifp, dl_tag));
+}
+
+static int
+vlan_detach_inet(struct ifnet *ifp, u_long dl_tag)
+{
+    return (ether_detach_inet(ifp, dl_tag));
+}
+
+static int
+vlan_attach_inet6(struct ifnet *ifp, u_long *dl_tag)
+{
+    return (ether_attach_inet6(ifp, dl_tag));
+}
+
+static int
+vlan_detach_inet6(struct ifnet *ifp, u_long dl_tag)
+{
+    return (ether_detach_inet6(ifp, dl_tag));
+}
+
+static int
+vlan_add_if(struct ifnet *ifp)
+{
+    return (ether_add_if(ifp));
 }
 
 }
 
-#endif /* NVLAN > 0 */
+static int
+vlan_del_if(struct ifnet *ifp)
+{
+    return (ether_del_if(ifp));
+}
+
+static int
+vlan_init_if(struct ifnet *ifp)
+{
+    return (0);
+}
+
+static int
+vlan_shutdown()
+{
+    return 0;
+}
+
+__private_extern__ int
+vlan_family_init()
+{
+    int  i, error=0;
+    struct dlil_ifmod_reg_str  ifmod_reg;
+    struct dlil_protomod_reg_str vlan_protoreg;
+
+#if 0
+    /* VLAN family is built-in, called from ether_family_init */
+    thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
+#endif 0
+
+    bzero(&ifmod_reg, sizeof(ifmod_reg));
+    ifmod_reg.add_if = vlan_add_if;
+    ifmod_reg.del_if = vlan_del_if;
+    ifmod_reg.init_if = vlan_init_if;
+    ifmod_reg.add_proto = ether_add_proto;
+    ifmod_reg.del_proto = ether_del_proto;
+    ifmod_reg.ifmod_ioctl = ether_ifmod_ioctl;
+    ifmod_reg.shutdown    = vlan_shutdown;
+
+    if (dlil_reg_if_modules(APPLE_IF_FAM_VLAN, &ifmod_reg)) {
+       printf("WARNING: vlan_family_init -- "
+              "Can't register if family modules\n");
+       error = EIO;
+       goto done;
+    }
+
+    /* Register protocol registration functions */
+    bzero(&vlan_protoreg, sizeof(vlan_protoreg));
+    vlan_protoreg.attach_proto = vlan_attach_inet;
+    vlan_protoreg.detach_proto = vlan_detach_inet;
+       
+    if (error = dlil_reg_proto_module(PF_INET, APPLE_IF_FAM_VLAN, 
+                                     &vlan_protoreg) != 0) {
+       kprintf("dlil_reg_proto_module failed for AF_INET6 error=%d\n",
+               error);
+       goto done;
+    }
+    vlan_protoreg.attach_proto = vlan_attach_inet6;
+    vlan_protoreg.detach_proto = vlan_detach_inet6;
+       
+    if (error = dlil_reg_proto_module(PF_INET6, APPLE_IF_FAM_VLAN, 
+                                     &vlan_protoreg) != 0) {
+       kprintf("dlil_reg_proto_module failed for AF_INET6 error=%d\n",
+               error);
+       goto done;
+    }
+    vlan_clone_attach();
+
+ done:
+#if 0
+    thread_funnel_switch(NETWORK_FUNNEL, KERNEL_FUNNEL);
+#endif 0
+    return (error);
+}
index 338d6ef87c1d2e50a627a2893b660d277b65a9eb..a77904411cb9fb6c5036af69b9b634e7e34d444b 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
+ * $FreeBSD: src/sys/net/if_vlan_var.h,v 1.16 2003/07/08 21:54:20 wpaul Exp $
  */
 
 #ifndef _NET_IF_VLAN_VAR_H_
 #define        _NET_IF_VLAN_VAR_H_     1
  */
 
 #ifndef _NET_IF_VLAN_VAR_H_
 #define        _NET_IF_VLAN_VAR_H_     1
-#include <sys/appleapiopts.h>
-
-#ifdef __APPLE_API_PRIVATE
-#ifdef KERNEL
-struct ifvlan {
-       struct  arpcom ifv_ac;  /* make this an interface */
-       struct  ifnet *ifv_p;   /* parent inteface of this vlan */
-       struct  ifv_linkmib {
-               int     ifvm_parent;
-               u_int16_t ifvm_proto; /* encapsulation ethertype */
-               u_int16_t ifvm_tag; /* tag to apply on packets leaving if */
-       }       ifv_mib;
-};
-#define        ifv_if  ifv_ac.ac_if
-#define        ifv_tag ifv_mib.ifvm_tag
-#endif /* KERNEL */
 
 struct ether_vlan_header {
        u_char  evl_dhost[ETHER_ADDR_LEN];
 
 struct ether_vlan_header {
        u_char  evl_dhost[ETHER_ADDR_LEN];
@@ -79,16 +64,15 @@ struct      ether_vlan_header {
        u_int16_t evl_proto;
 };
 
        u_int16_t evl_proto;
 };
 
-#define        EVL_VLANOFTAG(tag) ((tag) & 4095)
+#define EVL_VLID_MASK  0x0FFF
+#define        EVL_VLANOFTAG(tag) ((tag) & EVL_VLID_MASK)
 #define        EVL_PRIOFTAG(tag) (((tag) >> 13) & 7)
 #define        EVL_PRIOFTAG(tag) (((tag) >> 13) & 7)
-#define        EVL_ENCAPLEN    4       /* length in octets of encapsulation */
-
-/* When these sorts of interfaces get their own identifier... */
-#define        IFT_8021_VLAN   IFT_PROPVIRTUAL
 
 
+#if 0
 /* sysctl(3) tags, for compatibility purposes */
 #define        VLANCTL_PROTO   1
 #define        VLANCTL_MAX     2
 /* sysctl(3) tags, for compatibility purposes */
 #define        VLANCTL_PROTO   1
 #define        VLANCTL_MAX     2
+#endif 0
 
 /*
  * Configuration structure for SIOCSETVLAN and SIOCGETVLAN ioctls.
 
 /*
  * Configuration structure for SIOCSETVLAN and SIOCGETVLAN ioctls.
@@ -97,14 +81,5 @@ struct       vlanreq {
        char    vlr_parent[IFNAMSIZ];
        u_short vlr_tag;
 };
        char    vlr_parent[IFNAMSIZ];
        u_short vlr_tag;
 };
-#define        SIOCSETVLAN     SIOCSIFGENERIC
-#define        SIOCGETVLAN     SIOCGIFGENERIC
-
-#ifdef KERNEL
-/* shared with if_ethersubr.c: */
-extern u_int vlan_proto;
-extern int vlan_input(struct ether_header *eh, struct mbuf *m);
-#endif
 
 
-#endif /* __APPLE_API_PRIVATE */
 #endif /* _NET_IF_VLAN_VAR_H_ */
 #endif /* _NET_IF_VLAN_VAR_H_ */
index 424c4445d2d1ad89aba79a0f3cd3ad19911fab6f..fd19fe3ab145d273958c366507f4028cac1d23a1 100644 (file)
@@ -453,7 +453,8 @@ ip_input(struct mbuf *m)
                                goto bad;
                }
        }
                                goto bad;
                }
        }
-       if ((m->m_pkthdr.rcvif->if_hwassist == 0) || (apple_hwcksum_rx == 0) ||
+       if ((IF_HWASSIST_CSUM_FLAGS(m->m_pkthdr.rcvif->if_hwassist) == 0) 
+           || (apple_hwcksum_rx == 0) ||
           ((m->m_pkthdr.csum_flags & CSUM_TCP_SUM16) && ip->ip_p != IPPROTO_TCP))
                m->m_pkthdr.csum_flags = 0; /* invalidate HW generated checksum flags */
 
           ((m->m_pkthdr.csum_flags & CSUM_TCP_SUM16) && ip->ip_p != IPPROTO_TCP))
                m->m_pkthdr.csum_flags = 0; /* invalidate HW generated checksum flags */
 
index ec096591dfb0c80f3df16d4c02172adcc826b190..afc08e24676d35f0f7dfe64ed6cb83272d52c38a 100644 (file)
@@ -882,7 +882,8 @@ skip_ipsec:
 
 pass:
        m->m_pkthdr.csum_flags |= CSUM_IP;
 
 pass:
        m->m_pkthdr.csum_flags |= CSUM_IP;
-       sw_csum = m->m_pkthdr.csum_flags & ~ifp->if_hwassist;
+       sw_csum = m->m_pkthdr.csum_flags 
+               & ~IF_HWASSIST_CSUM_FLAGS(ifp->if_hwassist);
 
        if ((ifp->if_hwassist & CSUM_TCP_SUM16) != 0) {
                /*
 
        if ((ifp->if_hwassist & CSUM_TCP_SUM16) != 0) {
                /*
@@ -912,7 +913,7 @@ pass:
                m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
        }
        
                m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
        }
        
-       m->m_pkthdr.csum_flags &= ifp->if_hwassist;
+       m->m_pkthdr.csum_flags &= IF_HWASSIST_CSUM_FLAGS(ifp->if_hwassist);
 
        /*
         * If small enough for interface, or the interface will take
 
        /*
         * If small enough for interface, or the interface will take
@@ -2165,7 +2166,7 @@ ip_mloopback(ifp, m, dst, hlen)
         * The UDP checksum has not been calculated yet.
         */
         if (copym->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
         * The UDP checksum has not been calculated yet.
         */
         if (copym->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
-            if (ifp->if_hwassist) {
+            if (IF_HWASSIST_CSUM_FLAGS(ifp->if_hwassist)) {
                 copym->m_pkthdr.csum_flags |=
                     CSUM_DATA_VALID | CSUM_PSEUDO_HDR |
                     CSUM_IP_CHECKED | CSUM_IP_VALID;
                 copym->m_pkthdr.csum_flags |=
                     CSUM_DATA_VALID | CSUM_PSEUDO_HDR |
                     CSUM_IP_CHECKED | CSUM_IP_VALID;
index 0b536e84c6081cc6ed3bfafa97a04c36c4b3b6ad..8834990bad7bd7d9670152f05be3db7b5a38dd3e 100644 (file)
@@ -126,7 +126,7 @@ struct tcphdr {
 
 /*
  * Default maximum segment size for TCP.
 
 /*
  * Default maximum segment size for TCP.
- * With an IP MSS of 576, this is 536,
+ * With an IP MTU of 576, this is 536,
  * but 512 is probably more convenient.
  * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
  */
  * but 512 is probably more convenient.
  * This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)).
  */
index 9e05d983ba4299192f1eb289930e9a58cf1f6b3a..9b3bb93897b8ca251828803dfedff1c08faadab5 100644 (file)
@@ -201,6 +201,7 @@ struct nfs_args {
 #define        NFSMNT_READDIRSIZE      0x00020000  /* Set readdir size */
 #define        NFSMNT_NOLOCKS          0x00040000  /* don't support file locking */
 
 #define        NFSMNT_READDIRSIZE      0x00020000  /* Set readdir size */
 #define        NFSMNT_NOLOCKS          0x00040000  /* don't support file locking */
 
+#define        NFSSTA_MOUNTED          0x00004000  /* completely mounted */
 #define NFSSTA_TIMEO           0x00010000  /* experienced a timeout. */
 #define NFSSTA_FORCE           0x00020000  /* doing a forced unmount. */
 #define NFSSTA_HASWRITEVERF    0x00040000  /* Has write verifier for V3 */
 #define NFSSTA_TIMEO           0x00010000  /* experienced a timeout. */
 #define NFSSTA_FORCE           0x00020000  /* doing a forced unmount. */
 #define NFSSTA_HASWRITEVERF    0x00040000  /* Has write verifier for V3 */
@@ -685,6 +686,7 @@ int nfsrv_getcache __P((struct nfsrv_descript *, struct nfssvc_sock *,
                            struct mbuf **));
 void   nfsrv_updatecache __P((struct nfsrv_descript *, int, struct mbuf *));
 void   nfsrv_cleancache __P((void));
                            struct mbuf **));
 void   nfsrv_updatecache __P((struct nfsrv_descript *, int, struct mbuf *));
 void   nfsrv_cleancache __P((void));
+int    nfs_bind_resv_thread_wake __P((void));
 int    nfs_connect __P((struct nfsmount *, struct nfsreq *));
 void   nfs_disconnect __P((struct nfsmount *));
 int    nfs_getattrcache __P((struct vnode *, struct vattr *));
 int    nfs_connect __P((struct nfsmount *, struct nfsreq *));
 void   nfs_disconnect __P((struct nfsmount *));
 int    nfs_getattrcache __P((struct vnode *, struct vattr *));
index 9b55ac48f845fcbf2e5f2e868f7518b1da5e7b5f..3e9aac142c44aac96a3b65603da0b8aeb5e63a7f 100644 (file)
@@ -84,6 +84,8 @@
 
 #include <sys/time.h>
 #include <kern/clock.h>
 
 #include <sys/time.h>
 #include <kern/clock.h>
+#include <kern/task.h>
+#include <kern/thread.h>
 #include <sys/user.h>
 
 #include <netinet/in.h>
 #include <sys/user.h>
 
 #include <netinet/in.h>
@@ -189,6 +191,11 @@ static int nfs_reconnect __P((struct nfsreq *rep));
 static void    nfs_repbusy(struct nfsreq *rep);
 static struct nfsreq * nfs_repnext(struct nfsreq *rep);
 static void    nfs_repdequeue(struct nfsreq *rep);
 static void    nfs_repbusy(struct nfsreq *rep);
 static struct nfsreq * nfs_repnext(struct nfsreq *rep);
 static void    nfs_repdequeue(struct nfsreq *rep);
+
+/* XXX */
+boolean_t      current_thread_aborted(void);
+kern_return_t  thread_terminate(thread_act_t);
+
 #ifndef NFS_NOSERVER 
 static int     nfsrv_getstream __P((struct nfssvc_sock *,int));
 
 #ifndef NFS_NOSERVER 
 static int     nfsrv_getstream __P((struct nfssvc_sock *,int));
 
@@ -349,20 +356,139 @@ nfsdup(struct nfsreq *rep)
 }
 #endif /* NFSDIAG */
 
 }
 #endif /* NFSDIAG */
 
+
+/*
+ * attempt to bind a socket to a reserved port
+ */
+static int
+nfs_bind_resv(struct nfsmount *nmp)
+{
+       struct socket *so = nmp->nm_so;
+       struct sockaddr_in sin;
+       int error;
+       u_short tport;
+
+       if (!so)
+               return (EINVAL);
+
+       sin.sin_len = sizeof (struct sockaddr_in);
+       sin.sin_family = AF_INET;
+       sin.sin_addr.s_addr = INADDR_ANY;
+       tport = IPPORT_RESERVED - 1;
+       sin.sin_port = htons(tport);
+
+       while (((error = sobind(so, (struct sockaddr *) &sin)) == EADDRINUSE) &&
+              (--tport > IPPORT_RESERVED / 2))
+               sin.sin_port = htons(tport);
+       return (error);
+}
+
+/*
+ * variables for managing the nfs_bind_resv_thread
+ */
+int nfs_resv_mounts = 0;
+static int nfs_bind_resv_thread_state = 0;
+#define NFS_BIND_RESV_THREAD_STATE_INITTED     1
+#define NFS_BIND_RESV_THREAD_STATE_RUNNING     2
+static struct slock nfs_bind_resv_slock;
+struct nfs_bind_resv_request {
+       TAILQ_ENTRY(nfs_bind_resv_request) brr_chain;
+       struct nfsmount *brr_nmp;
+       int brr_error;
+};
+static TAILQ_HEAD(, nfs_bind_resv_request) nfs_bind_resv_request_queue;
+
+/*
+ * thread to handle any reserved port bind requests
+ */
+static void
+nfs_bind_resv_thread(void)
+{
+       struct nfs_bind_resv_request *brreq;
+        boolean_t funnel_state;
+
+       funnel_state = thread_funnel_set(network_flock, TRUE);
+       nfs_bind_resv_thread_state = NFS_BIND_RESV_THREAD_STATE_RUNNING;
+
+       while (nfs_resv_mounts > 0) {
+               simple_lock(&nfs_bind_resv_slock);
+               while ((brreq = TAILQ_FIRST(&nfs_bind_resv_request_queue))) {
+                       TAILQ_REMOVE(&nfs_bind_resv_request_queue, brreq, brr_chain);
+                       simple_unlock(&nfs_bind_resv_slock);
+                       brreq->brr_error = nfs_bind_resv(brreq->brr_nmp);
+                       wakeup(brreq);
+                       simple_lock(&nfs_bind_resv_slock);
+               }
+               simple_unlock(&nfs_bind_resv_slock);
+               (void)tsleep((caddr_t)&nfs_bind_resv_request_queue, PSOCK,
+                               "nfs_bind_resv_request_queue", 0);
+       }
+
+       nfs_bind_resv_thread_state = NFS_BIND_RESV_THREAD_STATE_INITTED;
+       (void) thread_funnel_set(network_flock, funnel_state);
+       (void) thread_terminate(current_act());
+}
+
+int
+nfs_bind_resv_thread_wake(void)
+{
+       if (nfs_bind_resv_thread_state < NFS_BIND_RESV_THREAD_STATE_RUNNING)
+               return (EIO);
+       wakeup(&nfs_bind_resv_request_queue);
+       return (0);
+}
+
+/*
+ * underprivileged procs call this to request nfs_bind_resv_thread
+ * to perform the reserved port binding for them.
+ */
+static int
+nfs_bind_resv_nopriv(struct nfsmount *nmp)
+{
+       struct nfs_bind_resv_request brreq;
+       int error;
+
+       if (nfs_bind_resv_thread_state < NFS_BIND_RESV_THREAD_STATE_RUNNING) {
+               if (nfs_bind_resv_thread_state < NFS_BIND_RESV_THREAD_STATE_INITTED) {
+                       simple_lock_init(&nfs_bind_resv_slock);
+                       TAILQ_INIT(&nfs_bind_resv_request_queue);
+                       nfs_bind_resv_thread_state = NFS_BIND_RESV_THREAD_STATE_INITTED;
+               }
+               kernel_thread(kernel_task, nfs_bind_resv_thread);
+               nfs_bind_resv_thread_state = NFS_BIND_RESV_THREAD_STATE_RUNNING;
+       }
+
+       brreq.brr_nmp = nmp;
+       brreq.brr_error = 0;
+
+       simple_lock(&nfs_bind_resv_slock);
+       TAILQ_INSERT_TAIL(&nfs_bind_resv_request_queue, &brreq, brr_chain);
+       simple_unlock(&nfs_bind_resv_slock);
+
+       error = nfs_bind_resv_thread_wake();
+       if (error) {
+               TAILQ_REMOVE(&nfs_bind_resv_request_queue, &brreq, brr_chain);
+               /* Note: we might be able to simply restart the thread */
+               return (error);
+       }
+
+       (void) tsleep((caddr_t)&brreq, PSOCK, "nfsbindresv", 0);
+
+       return (brreq.brr_error);
+}
+
 /*
  * Initialize sockets and congestion for a new NFS connection.
  * We do not free the sockaddr if error.
  */
 int
 nfs_connect(nmp, rep)
 /*
  * Initialize sockets and congestion for a new NFS connection.
  * We do not free the sockaddr if error.
  */
 int
 nfs_connect(nmp, rep)
-       register struct nfsmount *nmp;
+       struct nfsmount *nmp;
        struct nfsreq *rep;
 {
        struct nfsreq *rep;
 {
-       register struct socket *so;
+       struct socket *so;
        int s, error, rcvreserve, sndreserve;
        struct sockaddr *saddr;
        int s, error, rcvreserve, sndreserve;
        struct sockaddr *saddr;
-       struct sockaddr_in sin;
-       u_short tport;
 
        thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
        nmp->nm_so = (struct socket *)0;
 
        thread_funnel_switch(KERNEL_FUNNEL, NETWORK_FUNNEL);
        nmp->nm_so = (struct socket *)0;
@@ -379,18 +505,22 @@ nfs_connect(nmp, rep)
         * Some servers require that the client port be a reserved port number.
         */
        if (saddr->sa_family == AF_INET && (nmp->nm_flag & NFSMNT_RESVPORT)) {
         * Some servers require that the client port be a reserved port number.
         */
        if (saddr->sa_family == AF_INET && (nmp->nm_flag & NFSMNT_RESVPORT)) {
-               sin.sin_len = sizeof (struct sockaddr_in);
-               sin.sin_family = AF_INET;
-               sin.sin_addr.s_addr = INADDR_ANY;
-               tport = IPPORT_RESERVED - 1;
-               sin.sin_port = htons(tport);
-
-               while ((error = sobind(so, (struct sockaddr *) &sin) == EADDRINUSE) &&
-                      (--tport > IPPORT_RESERVED / 2))
-                       sin.sin_port = htons(tport);
-               if (error) {
-                       goto bad;
+               struct proc *p;
+               /*
+                * sobind() requires current_proc() to have superuser privs.
+                * If this bind is part of a reconnect, and the current proc
+                * doesn't have superuser privs, we hand the sobind() off to
+                * a kernel thread to process.
+                */
+               if ((nmp->nm_state & NFSSTA_MOUNTED) &&
+                   (p = current_proc()) && suser(p->p_ucred, &p->p_acflag)) {
+                       /* request nfs_bind_resv_thread() to do bind */
+                       error = nfs_bind_resv_nopriv(nmp);
+               } else {
+                       error = nfs_bind_resv(nmp);
                }
                }
+               if (error)
+                       goto bad;
        }
 
        /*
        }
 
        /*
@@ -541,6 +671,13 @@ nfs_reconnect(rep)
                if (error == EIO)
                        return (EIO);
                nfs_down(rep, "can not connect", error);
                if (error == EIO)
                        return (EIO);
                nfs_down(rep, "can not connect", error);
+               if (!(nmp->nm_state & NFSSTA_MOUNTED)) {
+                       /* we're not yet completely mounted and */
+                       /* we can't reconnect, so we fail */
+                       return (error);
+               }
+               if ((error = nfs_sigintr(rep->r_nmp, rep, rep->r_procp)))
+                       return (error);
                (void) tsleep((caddr_t)&lbolt, PSOCK, "nfscon", 0);
        }
 
                (void) tsleep((caddr_t)&lbolt, PSOCK, "nfscon", 0);
        }
 
@@ -1908,6 +2045,13 @@ nfs_timer(arg)
                    rep->r_lastmsg + nmp->nm_tprintf_delay < now.tv_sec) {
                        rep->r_lastmsg = now.tv_sec;
                        nfs_down(rep, "not responding", 0);
                    rep->r_lastmsg + nmp->nm_tprintf_delay < now.tv_sec) {
                        rep->r_lastmsg = now.tv_sec;
                        nfs_down(rep, "not responding", 0);
+                       if (!(nmp->nm_state & NFSSTA_MOUNTED)) {
+                               /* we're not yet completely mounted and */
+                               /* we can't complete an RPC, so we fail */
+                               nfsstats.rpctimeouts++;
+                               nfs_softterm(rep);
+                               continue;
+                       }
                }
                if (rep->r_rtt >= 0) {
                        rep->r_rtt++;
                }
                if (rep->r_rtt >= 0) {
                        rep->r_rtt++;
@@ -2306,7 +2450,7 @@ nfsrv_rcv(so, arg, waitflag)
        register struct nfssvc_sock *slp = (struct nfssvc_sock *)arg;
        register struct mbuf *m;
        struct mbuf *mp, *mhck;
        register struct nfssvc_sock *slp = (struct nfssvc_sock *)arg;
        register struct mbuf *m;
        struct mbuf *mp, *mhck;
-       struct sockaddr *nam=0;
+       struct sockaddr *nam;
        struct uio auio;
        int flags, ns_nflag=0, error;
        struct sockaddr_in  *sin;
        struct uio auio;
        int flags, ns_nflag=0, error;
        struct sockaddr_in  *sin;
@@ -2372,8 +2516,9 @@ nfsrv_rcv(so, arg, waitflag)
        } else {
                do {
                        auio.uio_resid = 1000000000;
        } else {
                do {
                        auio.uio_resid = 1000000000;
-                       flags = MSG_DONTWAIT;
+                       flags = MSG_DONTWAIT | MSG_NEEDSA;
                        nam = 0;
                        nam = 0;
+                       mp = 0;
                        error = soreceive(so, &nam, &auio, &mp,
                                                (struct mbuf **)0, &flags);
                        
                        error = soreceive(so, &nam, &auio, &mp,
                                                (struct mbuf **)0, &flags);
                        
@@ -2384,7 +2529,6 @@ nfsrv_rcv(so, arg, waitflag)
                                        sin = mtod(mhck, struct sockaddr_in *);
                                        bcopy(nam, sin, sizeof(struct sockaddr_in));
                                        mhck->m_hdr.mh_len = sizeof(struct sockaddr_in);
                                        sin = mtod(mhck, struct sockaddr_in *);
                                        bcopy(nam, sin, sizeof(struct sockaddr_in));
                                        mhck->m_hdr.mh_len = sizeof(struct sockaddr_in);
-                                       FREE(nam, M_SONAME);
 
                                        m = mhck;
                                        m->m_next = mp;
 
                                        m = mhck;
                                        m->m_next = mp;
@@ -2397,6 +2541,9 @@ nfsrv_rcv(so, arg, waitflag)
                                slp->ns_recend = m;
                                m->m_nextpkt = (struct mbuf *)0;
                        }
                                slp->ns_recend = m;
                                m->m_nextpkt = (struct mbuf *)0;
                        }
+                       if (nam) {
+                               FREE(nam, M_SONAME);
+                       }
                        if (error) {
                                if ((so->so_proto->pr_flags & PR_CONNREQUIRED)
                                        && error != EWOULDBLOCK) {
                        if (error) {
                                if ((so->so_proto->pr_flags & PR_CONNREQUIRED)
                                        && error != EWOULDBLOCK) {
index 98b3acd8bdc45354777b93457a9c87f84ae664ee..4b9a5b14669085523abc8f9a795be313b55756b7 100644 (file)
@@ -672,7 +672,6 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
        struct mbuf *mreq, *mb2;
        int siz, grpsiz, authsiz;
        struct timeval tv;
        struct mbuf *mreq, *mb2;
        int siz, grpsiz, authsiz;
        struct timeval tv;
-       static u_long base;
 
        authsiz = nfsm_rndup(auth_len);
        MGETHDR(mb, M_WAIT, MT_DATA);
 
        authsiz = nfsm_rndup(auth_len);
        MGETHDR(mb, M_WAIT, MT_DATA);
@@ -695,10 +694,15 @@ nfsm_rpchead(cr, nmflag, procid, auth_type, auth_len, auth_str, verf_len,
        /*
         * derive initial xid from system time
         */
        /*
         * derive initial xid from system time
         */
-       if (!base && (rootvp)) {
+       if (!nfs_xid) {
+               /*
+                * Note: it's OK if this code inits nfs_xid to 0 (for example,
+                * due to a broken clock) because we immediately increment it
+                * and we guarantee to never use xid 0.  So, nfs_xid should only
+                * ever be 0 the first time this function is called.
+                */
                microtime(&tv);
                microtime(&tv);
-               base = tv.tv_sec << 12;
-               nfs_xid = base;
+               nfs_xid = tv.tv_sec << 12;
        }
        /*
         * Skip zero xid if it should ever happen.
        }
        /*
         * Skip zero xid if it should ever happen.
index fcd38055c3cd07561deffc793dc7afff890bad10..0f253a565140eefa26d901b515c5c791834347fd 100644 (file)
 extern int     nfs_mountroot __P((void));
 
 extern int     nfs_ticks;
 extern int     nfs_mountroot __P((void));
 
 extern int     nfs_ticks;
+extern int     nfs_mount_type;
+extern int     nfs_resv_mounts;
 
 struct nfsstats        nfsstats;
 static int nfs_sysctl(int *, u_int, void *, size_t *, void *, size_t,
 
 struct nfsstats        nfsstats;
 static int nfs_sysctl(int *, u_int, void *, size_t *, void *, size_t,
@@ -423,6 +425,15 @@ nfs_mountroot()
 tryagain:
        error = nfs_boot_getfh(&nd, procp, v3);
        if (error) {
 tryagain:
        error = nfs_boot_getfh(&nd, procp, v3);
        if (error) {
+               if (error == EHOSTDOWN || error == EHOSTUNREACH) {
+                       if (nd.nd_root.ndm_path)
+                               FREE_ZONE(nd.nd_root.ndm_path, 
+                                         MAXPATHLEN, M_NAMEI);
+                       if (nd.nd_private.ndm_path)
+                               FREE_ZONE(nd.nd_private.ndm_path, 
+                                         MAXPATHLEN, M_NAMEI);
+                       return (error);
+               }
                if (v3) {
                        printf("nfs_boot_getfh(v3) failed with %d, trying v2...\n", error);
                        v3 = 0;
                if (v3) {
                        printf("nfs_boot_getfh(v3) failed with %d, trying v2...\n", error);
                        v3 = 0;
@@ -956,6 +967,9 @@ mountnfs(argp, mp, nam, pth, hst, vpp)
         */
        VOP_UNLOCK(*vpp, 0, curproc);
 
         */
        VOP_UNLOCK(*vpp, 0, curproc);
 
+       if (nmp->nm_flag & NFSMNT_RESVPORT)
+               nfs_resv_mounts++;
+       nmp->nm_state |= NFSSTA_MOUNTED;
        return (0);
 bad:
        nfs_disconnect(nmp);
        return (0);
 bad:
        nfs_disconnect(nmp);
@@ -1034,6 +1048,11 @@ nfs_unmount(mp, mntflags, p)
         */
        if (nmp->nm_flag & (NFSMNT_NQNFS | NFSMNT_KERB))
                nmp->nm_state |= NFSSTA_DISMNT;
         */
        if (nmp->nm_flag & (NFSMNT_NQNFS | NFSMNT_KERB))
                nmp->nm_state |= NFSSTA_DISMNT;
+       nmp->nm_state &= ~NFSSTA_MOUNTED;
+       if (nmp->nm_flag & NFSMNT_RESVPORT) {
+               if (--nfs_resv_mounts == 0)
+                       nfs_bind_resv_thread_wake();
+       }
 
        /*
         * Release the root vnode reference held by mountnfs()
 
        /*
         * Release the root vnode reference held by mountnfs()
index f55270fb2f3abb340098e06187e01230a234c0c3..dbf3f490d42239ccc0c2f6e8c1478bc3262dd65a 100644 (file)
@@ -128,10 +128,18 @@ struct    pkthdr {
        /* variables for ip and tcp reassembly */
        void    *header;                /* pointer to packet header */
         /* variables for hardware checksum */
        /* variables for ip and tcp reassembly */
        void    *header;                /* pointer to packet header */
         /* variables for hardware checksum */
+#ifdef KERNEL_PRIVATE
+       /* Note: csum_flags is used for hardware checksum and VLAN */
+#endif KERNEL_PRIVATE
         int     csum_flags;             /* flags regarding checksum */       
         int     csum_data;              /* data field used by csum routines */
        struct mbuf *aux;               /* extra data buffer; ipsec/others */
         int     csum_flags;             /* flags regarding checksum */       
         int     csum_data;              /* data field used by csum routines */
        struct mbuf *aux;               /* extra data buffer; ipsec/others */
+#ifdef KERNEL_PRIVATE
+       u_short vlan_tag;               /* VLAN tag, host byte order */
+       u_short reserved_1;             /* for future use */
+#else KERNEL_PRIVATE
        void    *reserved1;             /* for future use */
        void    *reserved1;             /* for future use */
+#endif KERNEL_PRIVATE
        void    *reserved2;             /* for future use */
 };
 
        void    *reserved2;             /* for future use */
 };
 
@@ -209,6 +217,16 @@ struct mbuf {
  
 #define CSUM_DELAY_DATA         (CSUM_TCP | CSUM_UDP)
 #define CSUM_DELAY_IP           (CSUM_IP)       /* XXX add ipv6 here too? */
  
 #define CSUM_DELAY_DATA         (CSUM_TCP | CSUM_UDP)
 #define CSUM_DELAY_IP           (CSUM_IP)       /* XXX add ipv6 here too? */
+#ifdef KERNEL_PRIVATE
+/*
+ * Note: see also IF_HWASSIST_CSUM defined in <net/if_var.h>
+ */
+/* bottom 16 bits reserved for hardware checksum */
+#define CSUM_CHECKSUM_MASK     0xffff
+
+/* VLAN tag present */
+#define CSUM_VLAN_TAG_VALID    0x10000         /* vlan_tag field is valid */
+#endif KERNEL_PRIVATE
 
 
 /* mbuf types */
 
 
 /* mbuf types */
index 4bac46299a793ccbef7b72ee30bb2979a3856e25..9d75befcdcfcf6340eef69c87fe1158e6ae9a045 100644 (file)
@@ -126,7 +126,8 @@ struct      proc {
 
        int     p_flag;                 /* P_* flags. */
        char    p_stat;                 /* S* process status. */
 
        int     p_flag;                 /* P_* flags. */
        char    p_stat;                 /* S* process status. */
-       char    p_pad1[3];
+        char   p_shutdownstate;
+       char    p_pad1[2];
 
        pid_t   p_pid;                  /* Process identifier. */
        LIST_ENTRY(proc) p_pglist;      /* List of processes in pgrp. */
 
        pid_t   p_pid;                  /* Process identifier. */
        LIST_ENTRY(proc) p_pglist;      /* List of processes in pgrp. */
index 837398c6ec47697fd4a843d5ad09487baab7fc98..bbe67de3f423556318cb3831394d22275e155aac 100644 (file)
@@ -400,6 +400,7 @@ struct msghdr {
 #define MSG_RCVMORE    0x4000          /* Data remains in current pkt */
 #endif
 #define MSG_COMPAT      0x8000         /* used in sendit() */
 #define MSG_RCVMORE    0x4000          /* Data remains in current pkt */
 #endif
 #define MSG_COMPAT      0x8000         /* used in sendit() */
+#define MSG_NEEDSA     0x10000         /* Fail receive if socket address cannot be allocated */
 
 /*
  * Header for ancillary data objects in msg_control buffer.
 
 /*
  * Header for ancillary data objects in msg_control buffer.
index 723e3e75b13c0312fa43501457ead6ecb52ebc5f..2767b7668dfe4fc6d464b262ba47e907a7b6e8f6 100644 (file)
 
 
 #ifdef KERNEL_PRIVATE
 
 
 #ifdef KERNEL_PRIVATE
+#define        SIOCIFCREATE    _IOWR('i', 120, struct ifreq)   /* create clone if */
+#define        SIOCIFDESTROY    _IOW('i', 121, struct ifreq)   /* destroy clone if */
+#if 0
+#define        SIOCIFGCLONERS  _IOWR('i', 129, struct if_clonereq) /* get cloners */
+#endif 0
+#define        SIOCSETVLAN      _IOW('i', 126, struct ifreq)   /* set VLAN config */
+#define        SIOCGETVLAN     _IOWR('i', 127, struct ifreq)   /* get VLAN config */
+
 /* 
  * temporary control calls to attach/detach IP to/from an ethernet interface
  */
 /* 
  * temporary control calls to attach/detach IP to/from an ethernet interface
  */
index 41de0c840f6b79b87737e043c6e6ea48ab5441af..78ef11b92a4ca2e80d602bc7661b4aafd65c08c6 100644 (file)
@@ -3829,8 +3829,8 @@ cluster_align_phys_io(struct vnode *vp, struct uio *uio, addr64_t usr_paddr, int
 //             copypv(ubc_paddr, usr_paddr, xsize, cppvPsrc | cppvPsnk | cppvFsnk);    /* Copy physical to physical and flush the destination */
                copypv(ubc_paddr, usr_paddr, xsize,        2 |        1 |        4);    /* Copy physical to physical and flush the destination */
        else
 //             copypv(ubc_paddr, usr_paddr, xsize, cppvPsrc | cppvPsnk | cppvFsnk);    /* Copy physical to physical and flush the destination */
                copypv(ubc_paddr, usr_paddr, xsize,        2 |        1 |        4);    /* Copy physical to physical and flush the destination */
        else
-//             copypv(ubc_paddr, usr_paddr, xsize, cppvPsrc | cppvPsnk | cppvFsrc);    /* Copy physical to physical and flush the source */
-               copypv(ubc_paddr, usr_paddr, xsize,        2 |        1 |        8);    /* Copy physical to physical and flush the source */
+//             copypv(usr_paddr, ubc_paddr, xsize, cppvPsrc | cppvPsnk | cppvFsrc);    /* Copy physical to physical and flush the source */
+               copypv(usr_paddr, ubc_paddr, xsize,        2 |        1 |        8);    /* Copy physical to physical and flush the source */
        
        if ( !(flags & CL_READ) || (upl_valid_page(pl, 0) && upl_dirty_page(pl, 0))) {
                /*
        
        if ( !(flags & CL_READ) || (upl_valid_page(pl, 0) && upl_dirty_page(pl, 0))) {
                /*
index d8dbc492e153003fbecdecde2e758c27ef662b48..b8c37e5cfb980b460170473797f56d942037c51e 100644 (file)
@@ -97,6 +97,7 @@ uid_t console_user;
 static int change_dir __P((struct nameidata *ndp, struct proc *p));
 static void checkdirs __P((struct vnode *olddp));
 static void enablequotas __P((struct proc *p, struct mount *mp));
 static int change_dir __P((struct nameidata *ndp, struct proc *p));
 static void checkdirs __P((struct vnode *olddp));
 static void enablequotas __P((struct proc *p, struct mount *mp));
+void notify_filemod_watchers(struct vnode *vp, struct proc *p);
 
 /* counts number of mount and unmount operations */
 unsigned int vfs_nummntops=0;
 
 /* counts number of mount and unmount operations */
 unsigned int vfs_nummntops=0;
@@ -2103,6 +2104,7 @@ chmod(p, uap, retval)
        VATTR_NULL(&vattr);
        vattr.va_mode = uap->mode & ALLPERMS;
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
        VATTR_NULL(&vattr);
        vattr.va_mode = uap->mode & ALLPERMS;
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
+
        vput(vp);
        return (error);
 }
        vput(vp);
        return (error);
 }
@@ -2141,6 +2143,7 @@ fchmod(p, uap, retval)
        vattr.va_mode = uap->mode & ALLPERMS;
        AUDIT_ARG(mode, (mode_t)vattr.va_mode);
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
        vattr.va_mode = uap->mode & ALLPERMS;
        AUDIT_ARG(mode, (mode_t)vattr.va_mode);
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
+
        VOP_UNLOCK(vp, 0, p);
 
        return (error);
        VOP_UNLOCK(vp, 0, p);
 
        return (error);
@@ -2190,6 +2193,7 @@ chown(p, uap, retval)
        vattr.va_uid = uap->uid;
        vattr.va_gid = uap->gid;
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
        vattr.va_uid = uap->uid;
        vattr.va_gid = uap->gid;
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
+
        vput(vp);
        return (error);
 }
        vput(vp);
        return (error);
 }
@@ -2230,6 +2234,7 @@ fchown(p, uap, retval)
        vattr.va_uid = uap->uid;
        vattr.va_gid = uap->gid;
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
        vattr.va_uid = uap->uid;
        vattr.va_gid = uap->gid;
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
+
        VOP_UNLOCK(vp, 0, p);
        return (error);
 }
        VOP_UNLOCK(vp, 0, p);
        return (error);
 }
@@ -2275,6 +2280,7 @@ setutimes(p, vp, ts, nullflag)
        if (nullflag)
                vattr.va_vaflags |= VA_UTIMES_NULL;
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
        if (nullflag)
                vattr.va_vaflags |= VA_UTIMES_NULL;
        error = VOP_SETATTR(vp, &vattr, p->p_ucred, p);
+
        VOP_UNLOCK(vp, 0, p);
 out:
        return error;
        VOP_UNLOCK(vp, 0, p);
 out:
        return error;
@@ -4142,6 +4148,7 @@ sync_internal(void)
 #define NUM_CHANGE_NODES 256
 static int                    changed_init=0;
 static volatile int           fmod_watch_enabled = 0;
 #define NUM_CHANGE_NODES 256
 static int                    changed_init=0;
 static volatile int           fmod_watch_enabled = 0;
+static pid_t                  fmod_watch_owner;
 static simple_lock_data_t     changed_nodes_lock;    // guard access
 static volatile struct vnode *changed_nodes[NUM_CHANGE_NODES];
 static volatile pid_t         changed_nodes_pid[NUM_CHANGE_NODES];
 static simple_lock_data_t     changed_nodes_lock;    // guard access
 static volatile struct vnode *changed_nodes[NUM_CHANGE_NODES];
 static volatile pid_t         changed_nodes_pid[NUM_CHANGE_NODES];
@@ -4155,7 +4162,7 @@ notify_filemod_watchers(struct vnode *vp, struct proc *p)
     int ret;
     
     // only want notification on regular files.
     int ret;
     
     // only want notification on regular files.
-    if (vp->v_type != VREG || fmod_watch_enabled == 0) {
+    if (fmod_watch_enabled == 0 || (vp->v_type != VREG && vp->v_type != VDIR)) {
        return;
     }
 
        return;
     }
 
@@ -4254,8 +4261,10 @@ fmod_watch(struct proc *p, struct fmod_watch_args *uap, register_t *retval)
     changed_rd_index = (changed_rd_index + 1) % NUM_CHANGE_NODES;
 
     if (vp == NULL) {
     changed_rd_index = (changed_rd_index + 1) % NUM_CHANGE_NODES;
 
     if (vp == NULL) {
-       panic("watch_file_changes: Someone put a null vnode in my table! (%d %d)\n",
-             changed_rd_index, changed_wr_index);
+       printf("watch_file_changes: Someone put a null vnode in my table! (%d %d)\n",
+              changed_rd_index, changed_wr_index);
+       error = EINVAL;
+       goto err0;
     }
 
     simple_unlock(&changed_nodes_lock);
     }
 
     simple_unlock(&changed_nodes_lock);
@@ -4266,7 +4275,7 @@ fmod_watch(struct proc *p, struct fmod_watch_args *uap, register_t *retval)
        wakeup((caddr_t)&changed_wr_index);
     }
 
        wakeup((caddr_t)&changed_wr_index);
     }
 
-    if (vp->v_type != VREG) {
+    if (vp->v_type != VREG && vp->v_type != VDIR) {
        error = EBADF;
        goto err1;
     }
        error = EBADF;
        goto err1;
     }
@@ -4351,6 +4360,7 @@ fmod_watch(struct proc *p, struct fmod_watch_args *uap, register_t *retval)
   err1:
     vrele(vp);    // undoes the vref() in notify_filemod_watchers()
 
   err1:
     vrele(vp);    // undoes the vref() in notify_filemod_watchers()
 
+  err0:
     *retval = -1;
     return error;
 }
     *retval = -1;
     return error;
 }
@@ -4370,6 +4380,8 @@ enable_fmod_watching(register_t *retval)
     }
     
     fmod_watch_enabled++;
     }
     
     fmod_watch_enabled++;
+    fmod_watch_owner = current_proc()->p_pid;
+
     *retval = 0;
     return 0;
 }
     *retval = 0;
     return 0;
 }
@@ -4377,10 +4389,16 @@ enable_fmod_watching(register_t *retval)
 static int
 disable_fmod_watching(register_t *retval)
 {
 static int
 disable_fmod_watching(register_t *retval)
 {
-    fmod_watch_enabled--;
-    if (fmod_watch_enabled < 0) {
-       panic("fmod_watching: too many disables! (%d)\n", fmod_watch_enabled);
+    if (!is_suser()) {
+       return EPERM;
+    }
+    
+    if (fmod_watch_enabled < 1) {
+       printf("fmod_watching: too many disables! (%d)\n", fmod_watch_enabled);
+       return EINVAL;
     }
     }
+
+    fmod_watch_enabled--;
     
     // if we're the last guy, clear out any remaining vnodes
     // in the table so they don't remain referenced.
     
     // if we're the last guy, clear out any remaining vnodes
     // in the table so they don't remain referenced.
@@ -4396,6 +4414,8 @@ disable_fmod_watching(register_t *retval)
            i = (i + 1) % NUM_CHANGE_NODES;
        }
        changed_wr_index = changed_rd_index = 0;
            i = (i + 1) % NUM_CHANGE_NODES;
        }
        changed_wr_index = changed_rd_index = 0;
+
+       fmod_watch_owner = 0;
     }
 
     // wake up anyone that may be waiting for the
     }
 
     // wake up anyone that may be waiting for the
@@ -4430,3 +4450,13 @@ fmod_watch_enable(struct proc *p, struct fmod_watch_enable_args *uap, register_t
 
     return ret;
 }
 
     return ret;
 }
+
+void
+clean_up_fmod_watch(struct proc *p)
+{
+    if (fmod_watch_enabled && fmod_watch_owner == p->p_pid) {
+       register_t *retval;
+       
+       disable_fmod_watching(&retval);
+    }
+}
index 668072d1e8f8ad5494b1e507b3b012816dc82bb6..502660a46a8f54f2b42c2310ef985c517e94af37 100644 (file)
@@ -773,6 +773,7 @@ _kdp_call_kdb
 _kdp_exception
 _kdp_exception_ack
 _kdp_flag
 _kdp_exception
 _kdp_exception_ack
 _kdp_flag
+_kdp_get_interface
 _kdp_get_ip_address
 _kdp_get_mac_addr
 _kdp_getc
 _kdp_get_ip_address
 _kdp_get_mac_addr
 _kdp_getc
@@ -789,6 +790,7 @@ _kdp_reboot
 _kdp_register_send_receive
 _kdp_remove_all_breakpoints
 _kdp_reset
 _kdp_register_send_receive
 _kdp_remove_all_breakpoints
 _kdp_reset
+_kdp_set_interface
 _kdp_set_ip_and_mac_addresses
 _kdp_sync_cache
 _kdp_unregister_send_receive
 _kdp_set_ip_and_mac_addresses
 _kdp_sync_cache
 _kdp_unregister_send_receive
index b3403bec63dd533c75e3ac5d688e7f9639739d3f..15f15dbb5f8d9ea148a0025c00f5282a173683c1 100644 (file)
@@ -5,7 +5,7 @@
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
-       <string>System Resource Pseudoextension, Apple Computer Inc, 7.2</string>
+       <string>System Resource Pseudoextension, Apple Computer Inc, 7.3</string>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kernel</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kernel</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleCompatibleVersion</key>
        <key>OSBundleCompatibleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
index 17c0b59654204a18961b26766d717b2869f16449..8ab715070e992a0066a22b9fc7a7f89f5817f648 100644 (file)
@@ -5,7 +5,7 @@
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
-       <string>AppleNMI Pseudoextension, Apple Computer Inc, 7.2</string>
+       <string>AppleNMI Pseudoextension, Apple Computer Inc, 7.3</string>
        <key>CFBundleIdentifier</key>
        <string>com.apple.driver.AppleNMI</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundleIdentifier</key>
        <string>com.apple.driver.AppleNMI</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
index 634c0a0481a7c8eee2bffc2264eb20c2f4dfa1b0..b898b322f618a503b68406394fcff322f50f86cd 100644 (file)
@@ -5,7 +5,7 @@
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
-       <string>Apple Platform Family Pseudoextension, Apple Computer Inc, 7.2</string>
+       <string>Apple Platform Family Pseudoextension, Apple Computer Inc, 7.3</string>
        <key>CFBundleIdentifier</key>
        <string>com.apple.iokit.ApplePlatformFamily</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundleIdentifier</key>
        <string>com.apple.iokit.ApplePlatformFamily</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleCompatibleVersion</key>
        <string>1.0</string>
        <key>OSBundleRequired</key>
        <key>OSBundleCompatibleVersion</key>
        <string>1.0</string>
        <key>OSBundleRequired</key>
index adc04c93550eeea142ef05c797450cd1e9880914..2e5375231154152a379c2d78b2021c13a8dabe0d 100644 (file)
@@ -7,7 +7,7 @@
        <key>CFBundleExecutable</key>
        <string>BSDKernel</string>
        <key>CFBundleGetInfoString</key>
        <key>CFBundleExecutable</key>
        <string>BSDKernel</string>
        <key>CFBundleGetInfoString</key>
-       <string>BSD Kernel Pseudoextension, Apple Computer Inc, 7.2</string>
+       <string>BSD Kernel Pseudoextension, Apple Computer Inc, 7.3</string>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kpi.bsd</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kpi.bsd</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleCompatibleVersion</key>
        <key>OSBundleCompatibleVersion</key>
-       <string>7.2</string>
+       <string>7.0</string>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
index 8267cff189e147376a5377736da6a77d1f443f0b..0e2ab5abeb9c31441ae1caf89117054999141f43 100644 (file)
@@ -7,7 +7,7 @@
        <key>CFBundleExecutable</key>
        <string>IOKit</string>
        <key>CFBundleGetInfoString</key>
        <key>CFBundleExecutable</key>
        <string>IOKit</string>
        <key>CFBundleGetInfoString</key>
-       <string>I/O Kit Pseudoextension, Apple Computer Inc, 7.2</string>
+       <string>I/O Kit Pseudoextension, Apple Computer Inc, 7.3</string>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kpi.iokit</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kpi.iokit</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleCompatibleVersion</key>
        <key>OSBundleCompatibleVersion</key>
-       <string>7.2</string>
+       <string>7.0</string>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
index 4769d258ea0d8043607af46f8724ff0b2c61d0c4..d7ee0381bf5f1c909c882b96562518abd5fe4442 100644 (file)
@@ -5,7 +5,7 @@
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
-       <string>AppleNMI Pseudoextension, Apple Computer Inc, 7.2</string>
+       <string>AppleNMI Pseudoextension, Apple Computer Inc, 7.3</string>
        <key>CFBundleIdentifier</key>
        <string>com.apple.iokit.IONVRAMFamily</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundleIdentifier</key>
        <string>com.apple.iokit.IONVRAMFamily</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleCompatibleVersion</key>
        <string>1.1</string>
        <key>OSBundleRequired</key>
        <key>OSBundleCompatibleVersion</key>
        <string>1.1</string>
        <key>OSBundleRequired</key>
index 714bbe7e3f93d9f81a688e41e15f5476524f3629..4eff8542039a88bdc21f3b4012ec0a02991acb3e 100644 (file)
@@ -5,7 +5,7 @@
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
        <key>CFBundleDevelopmentRegion</key>
        <string>English</string>
        <key>CFBundleGetInfoString</key>
-       <string>System Management Pseudoextension, Apple Computer Inc, 7.2</string>
+       <string>System Management Pseudoextension, Apple Computer Inc, 7.3</string>
        <key>CFBundleIdentifier</key>
        <string>com.apple.iokit.IOSystemManagementFamily</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundleIdentifier</key>
        <string>com.apple.iokit.IOSystemManagementFamily</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleCompatibleVersion</key>
        <string>1.0.0b1</string>
        <key>OSBundleRequired</key>
        <key>OSBundleCompatibleVersion</key>
        <string>1.0.0b1</string>
        <key>OSBundleRequired</key>
index cd2bda1d2a59625abb570f1bab09135c5d4fb48b..5f11aa616dbb1fc7522efdcf7b5b29b5c7d0fd01 100644 (file)
@@ -7,7 +7,7 @@
        <key>CFBundleExecutable</key>
        <string>Libkern</string>
        <key>CFBundleGetInfoString</key>
        <key>CFBundleExecutable</key>
        <string>Libkern</string>
        <key>CFBundleGetInfoString</key>
-       <string>Libkern Pseudoextension, Apple Computer Inc, 7.2</string>
+       <string>Libkern Pseudoextension, Apple Computer Inc, 7.3</string>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kpi.libkern</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kpi.libkern</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleCompatibleVersion</key>
        <key>OSBundleCompatibleVersion</key>
-       <string>7.2</string>
+       <string>7.0</string>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
index a87c1060dbcdfcf1b54145d680a3aa9967ca5682..ca266e8470881693639ddaa2f6d977c9544c627d 100644 (file)
@@ -7,7 +7,7 @@
        <key>CFBundleExecutable</key>
        <string>Mach</string>
        <key>CFBundleGetInfoString</key>
        <key>CFBundleExecutable</key>
        <string>Mach</string>
        <key>CFBundleGetInfoString</key>
-       <string>Mach Kernel Pseudoextension, Apple Computer Inc, 7.2</string>
+       <string>Mach Kernel Pseudoextension, Apple Computer Inc, 7.3</string>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kpi.mach</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundleIdentifier</key>
        <string>com.apple.kpi.mach</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
        <key>CFBundlePackageType</key>
        <string>KEXT</string>
        <key>CFBundleShortVersionString</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>7.2</string>
+       <string>7.3</string>
        <key>OSBundleCompatibleVersion</key>
        <key>OSBundleCompatibleVersion</key>
-       <string>7.2</string>
+       <string>7.0</string>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
        <key>OSBundleRequired</key>
        <string>Root</string>
        <key>OSKernelResource</key>
index ddc9ebda80b16bda86e48c5b14eca6b0f06ded36..0bb77b78e1b757cda3db3f1ad5a1cb4c7c41851d 100644 (file)
@@ -5653,6 +5653,7 @@ _kdp_call_kdb
 _kdp_exception
 _kdp_exception_ack
 _kdp_flag
 _kdp_exception
 _kdp_exception_ack
 _kdp_flag
+_kdp_get_interface
 _kdp_get_ip_address
 _kdp_get_mac_addr
 _kdp_getc
 _kdp_get_ip_address
 _kdp_get_mac_addr
 _kdp_getc
@@ -5669,6 +5670,7 @@ _kdp_reboot
 _kdp_register_send_receive
 _kdp_remove_all_breakpoints
 _kdp_reset
 _kdp_register_send_receive
 _kdp_remove_all_breakpoints
 _kdp_reset
+_kdp_set_interface
 _kdp_set_ip_and_mac_addresses
 _kdp_sync_cache
 _kdp_unregister_send_receive
 _kdp_set_ip_and_mac_addresses
 _kdp_sync_cache
 _kdp_unregister_send_receive
index 5d4dddfcb01735000dfa883235df1af2ddc29e25..b6eb4519420610d7dfc5536559a4ad4bf9e44116 100644 (file)
@@ -57,3 +57,4 @@ public:
  };
  
  #endif /* _IOPMEVENTSOURCE_H_ */
  };
  
  #endif /* _IOPMEVENTSOURCE_H_ */
index 58fab241e9fee08439b59589debe70cee7688bd9..9ed95e476a14575ba76f6f72dce3705782434a84 100644 (file)
@@ -69,3 +69,4 @@ public:
  };
  
  #endif /* _IOPMPOWERSTATEQUEUE_H_ */
  };
  
  #endif /* _IOPMPOWERSTATEQUEUE_H_ */
index 98d3ede23c37a6256d96d3822625724596489f91..224d99975f87012c0733518441751435593553d7 100644 (file)
@@ -274,20 +274,34 @@ IOReturn IOPMrootDomain::setProperties ( OSObject *props_obj)
 {
     OSDictionary                        *dict = OSDynamicCast(OSDictionary, props_obj);
     OSBoolean                           *b;
 {
     OSDictionary                        *dict = OSDynamicCast(OSDictionary, props_obj);
     OSBoolean                           *b;
+    OSString                            *boot_complete_string = OSString::withCString("System Boot Complete");
+    OSString                            *power_button_string = OSString::withCString("DisablePowerButtonSleep");
+    OSString                            *stall_halt_string = OSString::withCString("StallSystemAtHalt");
     
     if(!dict) return kIOReturnBadArgument;
 
     
     if(!dict) return kIOReturnBadArgument;
 
-    if(systemBooting && dict->getObject(OSString::withCString("System Boot Complete"))) 
+    
+
+    if(systemBooting && dict->getObject(boot_complete_string)) 
     {
         systemBooting = false;
         //kprintf("IOPM: received System Boot Complete property\n");
         adjustPowerState();
     }
     
     {
         systemBooting = false;
         //kprintf("IOPM: received System Boot Complete property\n");
         adjustPowerState();
     }
     
-    if(b = dict->getObject(OSString::withCString("DisablePowerButtonSleep"))) 
+    if(b = dict->getObject(power_button_string)) 
+    {
+        setProperty(power_button_string, b);
+    }
+
+    if(b = dict->getObject(stall_halt_string)) 
     {
     {
-        setProperty(OSString::withCString("DisablePowerButtonSleep"), b);
+        setProperty(stall_halt_string, b);
     }
     }
+    
+    if(boot_complete_string) boot_complete_string->release();
+    if(power_button_string) power_button_string->release();
+    if(stall_halt_string) stall_halt_string->release();
         
     return kIOReturnSuccess;
 }
         
     return kIOReturnSuccess;
 }
index f9ec811d3b6503e34cf7fa77ee9ee08b98119f6d..239fab5e520010991c98b7d2a1b5043acee33f3b 100644 (file)
@@ -251,7 +251,19 @@ int (*PE_halt_restart)(unsigned int type) = 0;
 
 int IOPlatformExpert::haltRestart(unsigned int type)
 {
 
 int IOPlatformExpert::haltRestart(unsigned int type)
 {
+  IOPMrootDomain *rd = getPMRootDomain();
+  OSBoolean   *b = 0;
+    
+  if(rd) b = (OSBoolean *)OSDynamicCast(OSBoolean, rd->getProperty(OSString::withCString("StallSystemAtHalt")));
+
   if (type == kPEHangCPU) while (1);
   if (type == kPEHangCPU) while (1);
+
+  if (kOSBooleanTrue == b) {
+    // Stall shutdown for 5 minutes, and if no outside force has removed our power, continue with
+    // a reboot.
+    IOSleep(1000*60*5);
+    type = kPERestartCPU;
+  }
   
   if (PE_halt_restart) return (*PE_halt_restart)(type);
   else return -1;
   
   if (PE_halt_restart) return (*PE_halt_restart)(type);
   else return -1;
index d3e777516f4e8e06cc44b73d8d04a68e55a4c918..fe67689b2ce2daad85b0549d4fc88c15ea14c445 100644 (file)
  */
 const char * gIOKernelKmods =
 "{"
  */
 const char * gIOKernelKmods =
 "{"
-"   'com.apple.kernel'                         = '7.2';"
-"   'com.apple.kpi.bsd'                        = '7.2';"
-"   'com.apple.kpi.iokit'                      = '7.2';"
-"   'com.apple.kpi.libkern'                    = '7.2';"
-"   'com.apple.kpi.mach'                       = '7.2';"
-"   'com.apple.iokit.IONVRAMFamily'            = '7.2';"
-"   'com.apple.driver.AppleNMI'                = '7.2';"
-"   'com.apple.iokit.IOSystemManagementFamily' = '7.2';"
-"   'com.apple.iokit.ApplePlatformFamily'      = '7.2';"
+"   'com.apple.kernel'                         = '7.3';"
+"   'com.apple.kpi.bsd'                        = '7.3';"
+"   'com.apple.kpi.iokit'                      = '7.3';"
+"   'com.apple.kpi.libkern'                    = '7.3';"
+"   'com.apple.kpi.mach'                       = '7.3';"
+"   'com.apple.iokit.IONVRAMFamily'            = '7.3';"
+"   'com.apple.driver.AppleNMI'                = '7.3';"
+"   'com.apple.iokit.IOSystemManagementFamily' = '7.3';"
+"   'com.apple.iokit.ApplePlatformFamily'      = '7.3';"
 "   'com.apple.kernel.6.0'                     = '6.9.9';"
 "   'com.apple.kernel.bsd'                     = '6.9.9';"
 "   'com.apple.kernel.iokit'                   = '6.9.9';"
 "   'com.apple.kernel.6.0'                     = '6.9.9';"
 "   'com.apple.kernel.bsd'                     = '6.9.9';"
 "   'com.apple.kernel.iokit'                   = '6.9.9';"
index 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f..00750edc07d6415dcc07ae0351e9397b0222b7ba 100644 (file)
@@ -1 +1 @@
-2
+3
index 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f..00750edc07d6415dcc07ae0351e9397b0222b7ba 100644 (file)
@@ -1 +1 @@
-2
+3
index 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f..00750edc07d6415dcc07ae0351e9397b0222b7ba 100644 (file)
@@ -1 +1 @@
-2
+3
index 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f..00750edc07d6415dcc07ae0351e9397b0222b7ba 100644 (file)
@@ -1 +1 @@
-2
+3
index 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f..00750edc07d6415dcc07ae0351e9397b0222b7ba 100644 (file)
@@ -1 +1 @@
-2
+3
diff --git a/osfmk/console/panic_image.c.orig b/osfmk/console/panic_image.c.orig
new file mode 100644 (file)
index 0000000..8933773
--- /dev/null
@@ -0,0 +1,1953 @@
+/* generated c file */
+
+static const struct {
+  unsigned int          pd_width;
+  unsigned int          pd_height;
+  unsigned int          bytes_per_pixel; /* 1: CLUT, 3:RGB, 4:RGBA */
+  unsigned char         image_pixel_data[0x880a];
+} panic_dialog = {
+       472, 255, 1,
+0xae,0x87,0xfd, 0x01,0x6c, 0x01,0x55, 0x80,0xbb,0xfd, 0x01,0x55, 0x01,0x6c, 0x06,0xfd, 
+0x01,0x6c, 0x01,0x55, 0x0b,0xfd, 0x01,0x41, 0x01,0x83, 0x24,0xfd, 0x01,0x83, 0x01,0x41, 0x80,0xa6,0xfd, 
+0x02,0x2b, 0x04,0xfd, 0x01,0x2b, 0x01,0x19, 0x30,0xfd, 0x01,0x2b, 0x01,0x00, 0x80,0xa9,0xfd, 
+0x01,0x55, 0x01,0x00, 0x04,0xfd, 0x01,0x19, 0x01,0x2b, 0x0a,0xfd, 0x01,0x00, 0x01,0x2b, 0x06,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x0b,0xfd, 0x01,0x00, 0x01,0x41, 0x24,0xfd, 0x01,0x41, 0x01,0x00, 0x12,0xfd, 
+0x04,0x00, 0x01,0x07, 0x80,0x8f,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x83, 0x30,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x55, 0x01,0x6c, 0x22,0xfd, 
+0x01,0x6c, 0x01,0x55, 0x10,0xfd, 0x01,0x41, 0x01,0x83, 0x52,0xfd, 0x01,0x55, 0x01,0x6c, 0x17,0xfd, 
+0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x2b, 0x01,0x00, 0x0a,0xfd, 0x01,0x00, 0x01,0x2b, 0x06,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x0b,0xfd, 0x01,0x00, 0x01,0x41, 0x1f,0xfd, 0x01,0x83, 0x01,0x41, 0x03,0xfd, 
+0x01,0x41, 0x01,0x00, 0x12,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0x41, 0x01,0x07, 0x01,0x00, 0x01,0x2b, 
+0x80,0x8f,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x19, 0x31,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x22,0xfd, 0x01,0x2b, 0x01,0x00, 0x10,0xfd, 0x01,0x00, 
+0x01,0x41, 0x52,0xfd, 0x01,0x00, 0x01,0x2b, 0x17,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x0a,0xfd, 0x01,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x0b,0xfd, 0x01,0x00, 
+0x01,0x41, 0x1f,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x12,0xfd, 0x01,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x80,0x8f,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x07, 
+0x01,0x19, 0x01,0x00, 0x03,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x19, 0x02,0x00, 0x01,0x19, 
+0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x19, 0x03,0x00, 0x01,0x83, 0x02,0xfd, 
+0x01,0x55, 0x05,0x00, 0x05,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x04,0x00, 
+0x01,0x83, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x02,0xfd, 0x01,0x19, 0x03,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0xfd, 0x01,0x41, 0x03,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x2e, 
+0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x04,0x00, 
+0x04,0xfd, 0x01,0x19, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x19, 0x03,0x00, 
+0x01,0x19, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x01,0x19, 0x01,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x02,0xfd, 
+0x01,0x19, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2e, 0x02,0x00, 0x01,0x2b, 
+0x01,0x83, 0x03,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x07, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 
+0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x09,0xfd, 
+0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x55, 0x05,0x00, 0x07,0xfd, 0x01,0x2b, 0x02,0x00, 
+0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x01,0xfd, 0x02,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0x19, 0x02,0x00, 0x01,0x19, 0x06,0xfd, 0x04,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0x55, 0x02,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x19, 0x03,0x00, 0x01,0x83, 0x06,0xfd, 0x01,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x01,0xfd, 
+0x01,0x00, 0x01,0x19, 0x02,0xfd, 0x02,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x71,0xfd, 
+0x01,0x19, 0x02,0x00, 0x01,0x55, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x2b, 0x01,0x83, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x83, 0x01,0x00, 
+0x01,0x19, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x83, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x02,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x02,0x55, 
+0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x07, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x06,0xfd, 0x01,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 
+0x06,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x6c, 0x01,0x55, 
+0x02,0x00, 0x01,0x41, 0x01,0x83, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x02,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 
+0x02,0xfd, 0x02,0x00, 0x01,0x41, 0x0a,0xfd, 0x01,0x41, 0x07,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 
+0x01,0x07, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x01,0x83, 
+0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x07, 
+0x01,0x00, 0x01,0x83, 0x01,0x19, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x07, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x07, 0x01,0x00, 0x06,0xfd, 
+0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x6c, 0x01,0x55, 0x01,0x00, 0x01,0x55, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 
+0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x02,0x2b, 0x01,0xfd, 0x01,0x6c, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x07, 0x74,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x41, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0x41, 0x01,0x07, 0x01,0x00, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 
+0x01,0x07, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x01,0x6c, 0x03,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 
+0x01,0x41, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x02,0x2b, 
+0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x06,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x04,0xfd, 
+0x02,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2e, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 
+0x01,0x83, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x03,0x41, 0x01,0x00, 0x01,0x55, 
+0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x0b,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0x41, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 
+0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 
+0x01,0x00, 0x01,0x07, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x01,0x55, 0x01,0x00, 0x02,0x2b, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x06,0xfd, 
+0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 0x01,0x07, 0x01,0x00, 0x06,0xfd, 0x04,0x00, 0x01,0x2e, 
+0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x01,0x19, 
+0x01,0x00, 0x01,0xfd, 0x01,0x07, 0x01,0x2b, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x00, 0x01,0x83, 
+0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x02,0x41, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x75,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x05,0x00, 0x01,0x2b, 0x01,0xfd, 0x06,0x00, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 
+0x06,0x00, 0x02,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 
+0x01,0x6c, 0x04,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x41, 
+0x06,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x01,0x55, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x07,0xfd, 0x01,0x41, 0x01,0x00, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x0b,0xfd, 0x01,0x41, 
+0x01,0x00, 0x04,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x00, 
+0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 0x01,0x19, 0x02,0x2b, 0x01,0x19, 
+0x01,0x00, 0x01,0x83, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x06,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x04,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x02,0x2b, 0x01,0x2e, 
+0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x05,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x75,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x07, 0x05,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x05,0xfd, 0x01,0x07, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 
+0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x08,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0x07, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x41, 0x07,0xfd, 0x01,0x00, 
+0x02,0x2b, 0x01,0x07, 0x02,0xfd, 0x02,0x2b, 0x03,0xfd, 0x02,0x2b, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x07,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x6c, 0x04,0xfd, 0x02,0x2b, 0x01,0x87, 0x01,0x82, 0x01,0x7d, 0x02,0x2b, 0x01,0x74, 
+0x01,0x26, 0x01,0x00, 0x01,0x6e, 0x01,0x6d, 0x01,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x01,0x6f, 0x01,0x71, 0x01,0x00, 0x01,0x2c, 0x01,0x7a, 0x01,0x7d, 0x01,0x58, 0x01,0x00, 
+0x01,0x5f, 0x01,0x8b, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x0b,0xfd, 0x01,0x41, 
+0x01,0x00, 0x04,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 
+0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2e, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x02,0x2b, 0x01,0x00, 
+0x01,0x55, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x0a,0xfd, 0x01,0x00, 0x01,0x41, 0x04,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 
+0x01,0x07, 0x01,0x00, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x2b, 0x01,0x07, 0x01,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x75,0xfd, 0x01,0x00, 0x01,0x2b, 0x04,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0xfd, 0x01,0x07, 
+0x02,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x07, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 
+0x02,0xfd, 0x01,0x2e, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x19, 0x02,0x00, 
+0x06,0xfd, 0x02,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 0x01,0xfd, 
+0x01,0x6c, 0x01,0x41, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 
+0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x2e, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x07, 0x07,0xfd, 0x01,0x19, 0x02,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x55, 0x01,0x00, 0x01,0x55, 0x01,0x6c, 0x02,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x08,0xfd, 0x02,0x00, 0x01,0x56, 0x01,0x7a, 0x01,0x15, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x22, 
+0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 
+0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x02,0x00, 0x01,0x47, 0x01,0x59, 0x02,0x00, 
+0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0x64, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x02,0x00, 
+0x02,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0xfd, 0x01,0x55, 0x01,0x6c, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x41, 0x01,0x2b, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x19, 0x02,0x00, 
+0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x19, 
+0x02,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x06,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 0x06,0xfd, 
+0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x6c, 0x02,0x00, 0x01,0x6c, 0x02,0xfd, 0x02,0x00, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x01,0x55, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x75,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x04,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x55, 0x02,0x00, 0x02,0x2b, 
+0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x07, 
+0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x41, 0x04,0x00, 0x02,0xfd, 0x01,0x19, 0x02,0x00, 0x02,0x2b, 
+0x01,0x00, 0x06,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 
+0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x04,0xfd, 0x01,0x41, 0x04,0x00, 0x01,0xfd, 0x01,0x6c, 0x03,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x83, 0x02,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x02,0x00, 0x02,0x2b, 
+0x01,0x00, 0x01,0x55, 0x01,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x19, 0x02,0x00, 0x06,0xfd, 0x01,0x83, 
+0x01,0x00, 0x01,0x2b, 0x04,0xfd, 0x01,0x19, 0x03,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 
+0x01,0x55, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x8b, 0x01,0x82, 
+0x01,0x79, 0x01,0x70, 0x01,0x59, 0x04,0x00, 0x02,0xfb, 0x01,0x03, 0x03,0x00, 0x01,0x03, 0x02,0xfb, 
+0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x03,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x03, 0x02,0x00, 0x01,0x03, 0x01,0x00, 
+0x01,0x2b, 0x01,0x70, 0x01,0x79, 0x01,0x44, 0x02,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x6c, 0x04,0x00, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x41, 
+0x01,0x00, 0x04,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x02,0x00, 0x02,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0x2e, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x07,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x41, 0x04,0x00, 0x06,0xfd, 0x01,0x00, 
+0x01,0x41, 0x05,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x2e, 
+0x02,0xfd, 0x02,0x00, 0x03,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x80,0xf2,0xfd, 0x01,0x00, 0x01,0x41, 0x15,0xfd, 0x01,0x8b, 0x01,0x84, 0x01,0x7a, 
+0x01,0x6f, 0x1f,0xfb, 0x01,0x00, 0x01,0x22, 0x10,0xfb, 0x01,0x6f, 0x01,0x7a, 0x01,0x84, 0x01,0x8b, 
+0x81,0x87,0xfd, 0x01,0x19, 0x01,0x00, 0x13,0xfd, 0x01,0x8b, 0x01,0x80, 0x01,0x75, 0x23,0xfb, 
+0x01,0x00, 0x01,0x22, 0x14,0xfb, 0x01,0x75, 0x01,0x80, 0x01,0x8b, 0x81,0x84,0xfd, 0x01,0x2e, 
+0x01,0x41, 0x10,0xfd, 0x01,0x8b, 0x01,0x81, 0x01,0x75, 0x26,0xfb, 0x01,0x2b, 0x01,0x47, 0x17,0xfb, 
+0x01,0x75, 0x01,0x81, 0x01,0x8b, 0x81,0x91,0xfd, 0x01,0x86, 0x01,0x79, 0x45,0xfb, 0x01,0x79, 
+0x01,0x86, 0x81,0x8c,0xfd, 0x01,0x8b, 0x01,0x80, 0x01,0x72, 0x49,0xfb, 0x01,0x72, 0x01,0x80, 
+0x01,0x8b, 0x80,0xfe,0xfd, 0x01,0x55, 0x01,0x6c, 0x2e,0xfd, 0x01,0x55, 0x01,0x41, 0x3b,0xfd, 
+0x01,0x41, 0x01,0x83, 0x1a,0xfd, 0x01,0x8b, 0x01,0xfc, 0x01,0x6d, 0x12,0xfb, 0x01,0x22, 0x01,0x59, 
+0x39,0xfb, 0x01,0x6d, 0x01,0xfc, 0x01,0x8b, 0x0c,0xfd, 0x01,0x83, 0x01,0x41, 0x42,0xfd, 0x01,0x6c, 
+0x01,0x55, 0x80,0xaa,0xfd, 0x01,0x00, 0x01,0x2b, 0x2d,0xfd, 0x03,0x00, 0x01,0x2b, 0x3a,0xfd, 
+0x01,0x00, 0x01,0x41, 0x18,0xfd, 0x01,0x8b, 0x01,0x7b, 0x15,0xfb, 0x01,0x00, 0x01,0x22, 0x3c,0xfb, 
+0x01,0x7b, 0x01,0x8b, 0x0a,0xfd, 0x01,0x41, 0x01,0x00, 0x12,0xfd, 0x04,0x00, 0x01,0x2e, 0x2b,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x80,0xaa,0xfd, 0x01,0x00, 0x01,0x2b, 0x0e,0xfd, 0x01,0x6c, 0x01,0x55, 
+0x03,0xfd, 0x01,0x55, 0x01,0x6c, 0x17,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x83, 0x3c,0xfd, 0x01,0x00, 
+0x01,0x41, 0x16,0xfd, 0x01,0x8b, 0x01,0x7c, 0x17,0xfb, 0x01,0x00, 0x01,0x22, 0x3e,0xfb, 0x01,0x7c, 
+0x01,0x8b, 0x03,0xfd, 0x01,0x83, 0x01,0x41, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x12,0xfd, 0x01,0x00, 
+0x01,0x07, 0x01,0x41, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x10,0xfd, 0x01,0x55, 0x01,0x6c, 0x0f,0xfd, 
+0x01,0x6c, 0x01,0x55, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x0e,0xfd, 0x01,0x83, 0x01,0x41, 0x03,0xfd, 
+0x01,0x83, 0x01,0x41, 0x80,0x95,0xfd, 0x01,0x00, 0x01,0x2b, 0x0e,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x17,0xfd, 0x01,0x41, 0x01,0x00, 0x3d,0xfd, 0x01,0x00, 0x01,0x41, 
+0x14,0xfd, 0x01,0x8b, 0x01,0x7d, 0x19,0xfb, 0x01,0x00, 0x01,0x22, 0x40,0xfb, 0x01,0x7d, 0x01,0x8b, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x12,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x10,0xfd, 0x01,0x00, 0x01,0x2b, 0x0f,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x0e,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 
+0x80,0x95,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x03,0x00, 0x02,0x2b, 0x03,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x55, 
+0x05,0xfd, 0x01,0x41, 0x04,0x00, 0x01,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0x00, 0x05,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 
+0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2e, 0x01,0x00, 0x01,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x01,0x6c, 
+0x04,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x83, 0x01,0x2b, 0x02,0x00, 
+0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x8b, 0x01,0x81, 0x01,0x14, 
+0x03,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x59, 0x04,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x00, 0x02,0x2b, 
+0x02,0x00, 0x01,0x36, 0x03,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 
+0x01,0x36, 0x03,0x00, 0x01,0x03, 0x06,0xfb, 0x01,0x59, 0x04,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x02,0x00, 0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x12, 0x03,0x00, 0x01,0x59, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x01,0xfb, 0x01,0x59, 0x03,0x00, 0x01,0x03, 0x02,0xfb, 0x01,0x36, 
+0x03,0x00, 0x01,0x03, 0x02,0xfb, 0x01,0x2b, 0x03,0x00, 0x04,0xfb, 0x01,0x70, 0x01,0x81, 0x04,0x00, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x02,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x19, 0x03,0x00, 
+0x01,0x83, 0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x03,0x00, 
+0x01,0x41, 0x01,0xfd, 0x04,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x01,0x41, 
+0x03,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x04,0x00, 0x01,0xfd, 0x04,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x19, 0x02,0x00, 
+0x01,0x19, 0x80,0x84,0xfd, 0x02,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x2e, 0x01,0x00, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x02,0x00, 0x01,0x07, 0x01,0xfd, 0x02,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x41, 0x06,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x6c, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x07, 0x02,0xfd, 0x01,0x6c, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 
+0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x6c, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0x83, 0x01,0x00, 0x01,0x0e, 0x01,0x75, 0x01,0x22, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x47, 0x01,0xfb, 0x02,0x00, 0x02,0x59, 0x02,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x02,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x47, 0x01,0x59, 0x01,0x2b, 0x01,0x00, 
+0x01,0x22, 0x01,0xfb, 0x02,0x00, 0x02,0xfb, 0x01,0x47, 0x06,0xfb, 0x02,0x00, 0x02,0x59, 0x02,0x00, 
+0x02,0xfb, 0x02,0x00, 0x01,0x22, 0x06,0xfb, 0x01,0x22, 0x02,0x00, 0x01,0x47, 0x01,0x59, 0x02,0x00, 
+0x02,0xfb, 0x02,0x00, 0x01,0x47, 0x02,0xfb, 0x02,0x00, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x47, 
+0x01,0xfb, 0x02,0x00, 0x02,0xfb, 0x01,0x47, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x47, 0x01,0xfb, 
+0x01,0x47, 0x06,0xfb, 0x01,0x28, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x6c, 0x01,0x55, 
+0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x06,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0x2e, 0x02,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2e, 0x01,0x83, 0x01,0xfd, 0x02,0x00, 0x02,0xfd, 0x02,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 
+0x01,0x6c, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 
+0x01,0x83, 0x01,0x07, 0x01,0x00, 0x80,0x84,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 
+0x01,0x07, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2e, 
+0x03,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x02,0x41, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x02,0x41, 
+0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x19, 0x01,0x83, 0x03,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x01,0x41, 0x01,0x3a, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x02,0x00, 0x04,0xfb, 0x01,0x47, 
+0x01,0x00, 0x01,0x47, 0x02,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x03, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 
+0x01,0xfb, 0x02,0x00, 0x01,0x12, 0x07,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x47, 0x02,0xfb, 0x01,0x47, 
+0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 
+0x01,0x12, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x12, 0x02,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x12, 
+0x02,0x22, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x02,0x00, 0x01,0x12, 0x03,0xfb, 0x01,0x47, 0x01,0x00, 
+0x01,0x2b, 0x01,0x47, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0xfc, 0x01,0x8b, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 
+0x01,0x07, 0x01,0x00, 0x06,0xfd, 0x04,0x00, 0x03,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x02,0x41, 
+0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2e, 0x04,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x80,0x84,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x07,0xfd, 0x01,0x83, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x05,0x00, 
+0x01,0x19, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0xfd, 0x02,0x2b, 0x01,0xfd, 0x01,0x41, 0x05,0x00, 
+0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x06,0xfd, 0x01,0x19, 0x02,0x00, 0x01,0x19, 0x02,0xfd, 0x05,0x00, 
+0x01,0x2b, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x04,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 
+0x01,0x22, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 
+0x01,0x22, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x2b, 0x02,0x00, 0x01,0x36, 
+0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 
+0x02,0xfb, 0x01,0x22, 0x05,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x59, 0x01,0x2b, 0x02,0x00, 0x01,0x36, 
+0x02,0xfb, 0x01,0x22, 0x02,0x00, 0x01,0x2b, 0x06,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0xfb, 0x01,0x72, 
+0x01,0x85, 0x01,0x3f, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x06,0x00, 0x06,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0x83, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x41, 0x05,0x00, 0x01,0x19, 
+0x01,0xfd, 0x01,0x83, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 
+0x01,0x07, 0x04,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x07,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x80,0x84,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x19, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2e, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x09,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2e, 0x01,0x00, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x08,0xfd, 0x01,0x07, 
+0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x01, 0x05,0xfb, 0x02,0x00, 0x04,0xfb, 0x01,0x47, 
+0x01,0x00, 0x01,0x47, 0x02,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x12, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 
+0x03,0xfb, 0x01,0x59, 0x02,0x00, 0x05,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x47, 0x02,0xfb, 0x01,0x47, 
+0x01,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 
+0x01,0x03, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x36, 
+0x07,0xfb, 0x01,0x59, 0x02,0x00, 0x04,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x2b, 0x05,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x01,0x2f, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x0a,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x07,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 
+0x02,0x2b, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 
+0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x80,0x84,0xfd, 
+0x02,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 
+0x01,0x83, 0x01,0x41, 0x02,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x02,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x41, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x01,0x55, 
+0x02,0xfd, 0x03,0x00, 0x03,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x01,0x55, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x02,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x02,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x6c, 0x01,0x88, 
+0x01,0x2b, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfb, 0x01,0x47, 0x01,0x36, 0x01,0xfb, 0x02,0x00, 0x02,0x59, 0x02,0x00, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x59, 0x01,0x47, 
+0x02,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x47, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x06,0xfb, 
+0x02,0x00, 0x02,0x59, 0x02,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 
+0x01,0x2b, 0x01,0x59, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x03,0xfb, 
+0x02,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x47, 0x01,0x36, 0x01,0xfb, 0x01,0x22, 0x01,0x47, 0x01,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x47, 0x01,0x22, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x03, 
+0x05,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x88, 0x02,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 0x06,0xfd, 
+0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 
+0x01,0x6c, 0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x02,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0x6c, 0x02,0x00, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x03,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x19, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x01,0x6c, 
+0x02,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x55, 0x01,0x00, 
+0x01,0x55, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x2b, 
+0x80,0x80,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 
+0x01,0x2e, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x02,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x02,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x83, 
+0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x02,0xfd, 0x01,0x2e, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x83, 
+0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x55, 0x02,0x00, 
+0x01,0x2b, 0x01,0x19, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x2e, 
+0x03,0x00, 0x01,0x15, 0x01,0x81, 0x02,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x12, 
+0x03,0x00, 0x01,0x12, 0x01,0xfb, 0x01,0x59, 0x04,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x59, 0x03,0x00, 0x01,0x12, 0x01,0x00, 0x01,0x22, 
+0x01,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x36, 0x06,0xfb, 0x01,0x59, 0x04,0x00, 0x01,0x59, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x03,0xfb, 
+0x01,0x00, 0x01,0x22, 0x03,0xfb, 0x01,0x59, 0x01,0x2b, 0x03,0x00, 0x01,0x12, 0x01,0xfb, 0x01,0x2b, 
+0x03,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x47, 0x03,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x2b, 0x02,0x00, 
+0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0xfb, 0x01,0x81, 0x01,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 
+0x01,0x41, 0x04,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x07, 
+0x01,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 
+0x02,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x41, 0x01,0x83, 0x03,0x00, 0x01,0x2e, 0x02,0x00, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x83, 0x02,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x2b, 0x02,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 
+0x01,0x55, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x80,0xf7,0xfd, 0x01,0x8b, 0x01,0x7b, 0x44,0xfb, 0x01,0x22, 0x01,0x00, 0x2d,0xfb, 
+0x01,0x7b, 0x01,0x8b, 0x81,0x60,0xfd, 0x01,0x8b, 0x01,0x75, 0x45,0xfb, 0x01,0x22, 0x01,0x00, 
+0x2e,0xfb, 0x01,0x75, 0x01,0x8b, 0x81,0x5e,0xfd, 0x01,0x86, 0x01,0x70, 0x46,0xfb, 0x01,0x47, 
+0x01,0x2b, 0x2f,0xfb, 0x01,0x70, 0x01,0x86, 0x81,0x5c,0xfd, 0x01,0x82, 0x7b,0xfb, 0x01,0x82, 
+0x81,0x5a,0xfd, 0x01,0x7f, 0x7d,0xfb, 0x01,0x7f, 0x81,0x58,0xfd, 0x01,0x7d, 0x3d,0xfb, 
+0x01,0x82, 0x04,0xfd, 0x01,0x82, 0x3c,0xfb, 0x01,0x7d, 0x81,0x55,0xfd, 0x01,0x8b, 0x01,0x7c, 
+0x3d,0xfb, 0x08,0xfd, 0x3c,0xfb, 0x01,0x7c, 0x01,0x8b, 0x81,0x52,0xfd, 0x01,0x8b, 0x01,0x7b, 
+0x3d,0xfb, 0x0a,0xfd, 0x3c,0xfb, 0x01,0x7b, 0x01,0x8b, 0x81,0x50,0xfd, 0x01,0x8b, 0x01,0x7b, 
+0x3d,0xfb, 0x01,0x7e, 0x0a,0xfd, 0x01,0x7e, 0x3c,0xfb, 0x01,0x7b, 0x01,0x8b, 0x81,0x4f,0xfd, 
+0x01,0x7c, 0x3e,0xfb, 0x0c,0xfd, 0x3d,0xfb, 0x01,0x7c, 0x81,0x4e,0xfd, 0x01,0x7d, 0x3f,0xfb, 
+0x0c,0xfd, 0x3e,0xfb, 0x01,0x7d, 0x81,0x4c,0xfd, 0x01,0x7f, 0x40,0xfb, 0x0c,0xfd, 0x3f,0xfb, 
+0x01,0x7f, 0x81,0x4a,0xfd, 0x01,0x82, 0x41,0xfb, 0x0c,0xfd, 0x40,0xfb, 0x01,0x82, 0x81,0x48,0xfd, 
+0x01,0x86, 0x42,0xfb, 0x0c,0xfd, 0x41,0xfb, 0x01,0x86, 0x81,0x46,0xfd, 0x01,0x8b, 0x01,0x70, 
+0x42,0xfb, 0x0c,0xfd, 0x41,0xfb, 0x01,0x70, 0x01,0x8b, 0x81,0x44,0xfd, 0x01,0x8b, 0x01,0x75, 
+0x43,0xfb, 0x0c,0xfd, 0x42,0xfb, 0x01,0x75, 0x01,0x8b, 0x81,0x43,0xfd, 0x01,0x7b, 0x44,0xfb, 
+0x0c,0xfd, 0x43,0xfb, 0x01,0x7b, 0x81,0x42,0xfd, 0x01,0x81, 0x45,0xfb, 0x0c,0xfd, 0x44,0xfb, 
+0x01,0x81, 0x81,0x40,0xfd, 0x01,0x88, 0x46,0xfb, 0x0c,0xfd, 0x45,0xfb, 0x01,0x88, 0x81,0x3e,0xfd, 
+0x01,0x8b, 0x01,0x74, 0x46,0xfb, 0x0c,0xfd, 0x45,0xfb, 0x01,0x74, 0x01,0x8b, 0x80,0xf2,0xfd, 
+0x01,0x83, 0x01,0x41, 0x02,0xfd, 0x01,0x6c, 0x01,0x55, 0x26,0xfd, 0x01,0x55, 0x01,0x6c, 0x05,0xfd, 
+0x01,0x41, 0x01,0x83, 0x16,0xfd, 0x01,0xfc, 0x47,0xfb, 0x08,0xfd, 0x01,0x83, 0x01,0x41, 0x02,0xfd, 
+0x46,0xfb, 0x01,0xfc, 0x33,0xfd, 0x01,0x6c, 0x01,0x55, 0x29,0xfd, 0x01,0x41, 0x01,0x83, 0x76,0xfd, 
+0x01,0x07, 0x01,0x2b, 0x05,0xfd, 0x01,0x00, 0x01,0x83, 0x10,0xfd, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x26,0xfd, 0x01,0x00, 0x01,0x2b, 0x04,0xfd, 
+0x02,0x2b, 0x16,0xfd, 0x01,0x85, 0x48,0xfb, 0x08,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x03, 
+0x01,0x2b, 0x33,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x59, 0x04,0xfb, 0x01,0x2b, 0x01,0x00, 0x09,0xfb, 
+0x01,0x0d, 0x01,0x2b, 0x31,0xfd, 0x01,0x2b, 0x01,0x00, 0x29,0xfd, 0x01,0x00, 0x01,0x41, 0x76,0xfd, 
+0x01,0x2e, 0x01,0x00, 0x01,0x83, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x11,0xfd, 0x01,0x2b, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x26,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x55, 0x01,0x2b, 0x16,0xfd, 0x01,0x8b, 0x01,0x72, 0x29,0xfb, 0x01,0x47, 0x01,0x36, 
+0x1d,0xfb, 0x08,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x22, 0x01,0x03, 0x11,0xfb, 0x01,0x47, 
+0x01,0x36, 0x20,0xfb, 0x02,0x00, 0x01,0x03, 0x03,0xfb, 0x01,0x47, 0x02,0x00, 0x09,0xfb, 0x01,0x27, 
+0x01,0x12, 0x0a,0xfd, 0x01,0x6c, 0x01,0x55, 0x25,0xfd, 0x01,0x2b, 0x01,0x00, 0x0d,0xfd, 0x01,0x6c, 
+0x01,0x55, 0x1a,0xfd, 0x01,0x00, 0x01,0x41, 0x77,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x2b, 
+0x01,0x07, 0x14,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x26,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x1b,0xfd, 0x01,0xfc, 0x2a,0xfb, 0x01,0x2b, 0x01,0x00, 0x1d,0xfb, 0x08,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x13,0xfb, 0x01,0x2b, 0x01,0x00, 0x20,0xfb, 0x03,0x00, 0x03,0xfb, 0x01,0x2b, 
+0x02,0x00, 0x0a,0xfb, 0x01,0xfc, 0x0a,0xfd, 0x01,0x2b, 0x01,0x00, 0x25,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x0d,0xfd, 0x01,0x2b, 0x01,0x00, 0x1a,0xfd, 0x01,0x00, 0x01,0x41, 0x77,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x19, 0x03,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 
+0x06,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x19, 0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x55, 0x03,0x00, 
+0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x55, 0x01,0x19, 0x02,0x00, 0x01,0x19, 
+0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x19, 0x01,0x88, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 
+0x01,0x00, 0x02,0x22, 0x01,0x00, 0x01,0x03, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x36, 0x03,0x00, 
+0x01,0x36, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x04,0xfb, 0x01,0x12, 0x01,0x00, 0x01,0x59, 
+0x02,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x36, 0x01,0xfb, 
+0x01,0x22, 0x03,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x02,0x8b, 0x01,0x13, 
+0x03,0x00, 0x01,0x59, 0x06,0xfb, 0x01,0x36, 0x03,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0xf7, 
+0x02,0x00, 0x01,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfb, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x13, 
+0x01,0x8b, 0x01,0x3c, 0x03,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x59, 0x03,0x00, 0x01,0x03, 0x02,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x03, 
+0x01,0x00, 0x01,0x2b, 0x09,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x47, 0x02,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x12, 0x03,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0x88, 0x01,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x03,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x19, 
+0x02,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x05,0x00, 
+0x01,0x41, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x19, 0x05,0xfd, 
+0x01,0x41, 0x03,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2e, 0x03,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x55, 0x6c,0xfd, 
+0x01,0x2e, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2e, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x04,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x06,0xfd, 0x02,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x19, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 
+0x02,0xfd, 0x02,0x00, 0x01,0x07, 0x01,0xfd, 0x02,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x07, 0x01,0x00, 
+0x02,0xfd, 0x01,0x41, 0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x75, 0x01,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x2b, 0x01,0x59, 0x01,0xfb, 0x01,0x59, 
+0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x22, 0x06,0xfb, 
+0x01,0x00, 0x01,0x03, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x47, 
+0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x02,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x05,0xfb, 
+0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x02,0x00, 
+0x01,0x6c, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x6c, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x2b, 0x01,0xfb, 0x02,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x63, 
+0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x85, 0x02,0x00, 
+0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 
+0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x2b, 0x01,0x59, 0x0a,0xfb, 0x01,0x00, 0x01,0x22, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x02,0x36, 
+0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x75, 0x01,0x8b, 
+0x02,0x00, 0x01,0x07, 0x01,0xfd, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 
+0x01,0x83, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x83, 0x01,0x00, 0x01,0x19, 
+0x05,0xfd, 0x02,0x00, 0x01,0x83, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x02,0xfd, 0x02,0x00, 0x01,0x41, 0x01,0x83, 
+0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 
+0x6d,0xfd, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0x41, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x02,0x41, 0x01,0x00, 0x01,0x07, 0x03,0xfd, 0x01,0x83, 
+0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x41, 
+0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x02,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 
+0x01,0x00, 0x03,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x03,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x03, 0x01,0x00, 0x03,0x22, 
+0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 
+0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x00, 0x01,0x03, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x7a, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0x41, 0x01,0x07, 0x01,0x00, 0x05,0xfb, 0x01,0x03, 0x01,0x00, 0x03,0xfb, 0x01,0x03, 
+0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x19, 0x02,0x22, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x59, 0x0b,0xfb, 
+0x01,0x00, 0x01,0x22, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x02,0x2b, 0x01,0x22, 0x01,0x00, 0x06,0xfb, 
+0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x81, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x01,0x2e, 0x02,0x41, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x41, 0x01,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0x83, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x06,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x6c, 0x05,0xfd, 0x01,0x00, 0x01,0x2e, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x19, 0x01,0x00, 0x03,0x41, 0x01,0x00, 0x01,0x55, 0x6c,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 
+0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x06,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x05,0x00, 0x01,0x19, 0x03,0xfd, 0x02,0x00, 0x08,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x03,0xfd, 0x05,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x04,0x00, 0x02,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x2b, 0x05,0x00, 0x01,0x36, 
+0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x47, 0x01,0x12, 0x01,0x00, 
+0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0x82, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x06,0x00, 0x01,0x87, 0x04,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x03,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x3e, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x35, 0x04,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x05,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 
+0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x0c,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0x47, 
+0x01,0x00, 0x01,0x36, 0x01,0x00, 0x01,0x47, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x47, 0x04,0x00, 
+0x01,0x22, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x70, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x05,0x00, 0x01,0x19, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x05,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 
+0x04,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 
+0x05,0x00, 0x01,0x55, 0x6c,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x55, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x08,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x00, 0x01,0x07, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x30, 
+0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x03, 
+0x01,0x00, 0x06,0xfb, 0x01,0x00, 0x01,0x2b, 0x08,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x03, 
+0x02,0xfb, 0x01,0x00, 0x01,0x03, 0x03,0xfb, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x70, 0x03,0xfb, 
+0x01,0x03, 0x01,0x00, 0x03,0xfb, 0x01,0x03, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x3e, 0x02,0xfd, 
+0x01,0x55, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x4a, 0x01,0x00, 
+0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x8b, 0x01,0x7e, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 
+0x01,0x12, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x0c,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 
+0x03,0x00, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 
+0x01,0x22, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x05,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x07, 0x06,0xfd, 
+0x01,0x19, 0x01,0x00, 0x01,0x55, 0x08,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x05,0xfd, 0x01,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x72,0xfd, 0x02,0x00, 
+0x01,0x19, 0x03,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 0x02,0xfd, 0x01,0x00, 
+0x01,0x07, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 
+0x01,0x6c, 0x01,0x55, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x09,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x41, 0x01,0xfd, 0x01,0x19, 
+0x01,0x00, 0x01,0x6c, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 
+0x01,0x2b, 0x01,0x83, 0x01,0xfd, 0x01,0x55, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 
+0x01,0x74, 0x01,0x2b, 0x01,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x01,0x59, 0x02,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x36, 0x01,0x47, 0x01,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x08,0xfb, 0x01,0x2b, 0x02,0x00, 0x03,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x47, 
+0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x59, 0x01,0x87, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 0x01,0xfd, 
+0x01,0x7e, 0x03,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x00, 0x01,0x3e, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfb, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 
+0x01,0x07, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x01,0x48, 
+0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x59, 0x01,0x22, 0x02,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 
+0x04,0xfb, 0x01,0x2b, 0x01,0x22, 0x06,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x03, 0x01,0x00, 
+0x01,0x03, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x03, 
+0x01,0x00, 0x01,0x12, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x6c, 0x01,0x55, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x41, 0x01,0xfd, 0x01,0x19, 
+0x01,0x00, 0x01,0x2e, 0x09,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 
+0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x05,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0xfd, 0x01,0x07, 
+0x02,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x2e, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0xfd, 
+0x01,0x55, 0x01,0x6c, 0x6d,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x04,0xfd, 0x01,0x41, 0x04,0x00, 
+0x02,0xfd, 0x01,0x19, 0x02,0x00, 0x01,0x19, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x01,0x2b, 
+0x03,0x00, 0x01,0x2e, 0x01,0xfd, 0x06,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x04,0xfd, 0x01,0x07, 
+0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x6c, 0x04,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x12, 0x02,0x00, 0x01,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x01,0x47, 0x04,0x00, 0x01,0x47, 
+0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x08,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x04,0xfb, 0x01,0x2b, 
+0x03,0x00, 0x01,0x36, 0x01,0x8b, 0x01,0xfd, 0x01,0x83, 0x02,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x04,0xfd, 0x01,0x41, 0x04,0x00, 0x01,0xfd, 0x01,0x7e, 0x04,0xfb, 0x01,0x36, 0x03,0x00, 
+0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x3e, 0x03,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x07, 0x01,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfb, 0x01,0x7e, 0x01,0x2b, 0x02,0x00, 0x01,0x2e, 0x02,0x00, 0x01,0xfd, 0x01,0x83, 0x02,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x01,0x8b, 0x01,0x59, 0x03,0x00, 
+0x01,0x12, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x06,0xfb, 
+0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x22, 0x01,0x59, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 
+0x02,0xfb, 0x01,0x03, 0x02,0x00, 0x02,0x2b, 0x01,0x00, 0x01,0x36, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x02,0x00, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x07, 0x03,0x00, 0x01,0x2b, 0x01,0xfd, 0x06,0x00, 0x01,0x41, 
+0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2e, 0x02,0x00, 0x05,0xfd, 
+0x01,0x83, 0x02,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x55, 
+0x02,0x00, 0x02,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x02,0xfd, 0x01,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x04,0x00, 0x01,0x6c, 0x80,0xca,0xfd, 
+0x01,0x8b, 0x2c,0xfb, 0x01,0x8b, 0x13,0xfd, 0x01,0x7e, 0x0d,0xfb, 0x0c,0xfd, 0x0b,0xfb, 0x01,0x7e, 
+0x13,0xfd, 0x01,0x8b, 0x2d,0xfb, 0x01,0x8b, 0x81,0x2f,0xfd, 0x01,0x7b, 0x2b,0xfb, 0x01,0x8b, 
+0x14,0xfd, 0x01,0x78, 0x0d,0xfb, 0x0c,0xfd, 0x0b,0xfb, 0x01,0x78, 0x14,0xfd, 0x01,0x8b, 0x2c,0xfb, 
+0x01,0x7b, 0x81,0x2e,0xfd, 0x01,0x8b, 0x2b,0xfb, 0x01,0x8b, 0x15,0xfd, 0x0e,0xfb, 0x0c,0xfd, 
+0x0c,0xfb, 0x15,0xfd, 0x01,0x8b, 0x2c,0xfb, 0x01,0x8b, 0x81,0x2d,0xfd, 0x01,0xfc, 0x29,0xfb, 
+0x01,0x6e, 0x01,0x8b, 0x15,0xfd, 0x01,0x8b, 0x0e,0xfb, 0x0c,0xfd, 0x0c,0xfb, 0x01,0x8b, 0x15,0xfd, 
+0x01,0x8b, 0x01,0x6e, 0x2a,0xfb, 0x01,0xfc, 0x81,0x2c,0xfd, 0x01,0x8b, 0x01,0x6d, 0x29,0xfb, 
+0x01,0x8b, 0x16,0xfd, 0x0f,0xfb, 0x0c,0xfd, 0x0d,0xfb, 0x16,0xfd, 0x01,0x8b, 0x2a,0xfb, 0x01,0x6d, 
+0x01,0x8b, 0x80,0xd2,0xfd, 0x01,0x83, 0x01,0x41, 0x12,0xfd, 0x01,0x55, 0x01,0x6c, 0x05,0xfd, 
+0x01,0x41, 0x01,0x83, 0x3c,0xfd, 0x01,0x80, 0x0e,0xfb, 0x01,0x59, 0x01,0x22, 0x01,0x47, 0x18,0xfb, 
+0x01,0x8b, 0x01,0xfd, 0x01,0x6c, 0x01,0x55, 0x13,0xfd, 0x10,0xfb, 0x07,0xfd, 0x01,0x55, 0x01,0x6c, 
+0x03,0xfd, 0x0e,0xfb, 0x11,0xfd, 0x01,0x55, 0x01,0x6c, 0x03,0xfd, 0x01,0x8b, 0x2a,0xfb, 0x01,0x80, 
+0x2e,0xfd, 0x01,0x41, 0x01,0x83, 0x27,0xfd, 0x01,0x83, 0x01,0x41, 0x79,0xfd, 0x01,0x41, 0x01,0x00, 
+0x12,0xfd, 0x01,0x00, 0x01,0x2b, 0x04,0xfd, 0x02,0x2b, 0x3d,0xfd, 0x01,0x72, 0x0d,0xfb, 0x01,0x22, 
+0x03,0x00, 0x17,0xfb, 0x01,0x8b, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x11,0xfd, 0x01,0x8b, 
+0x11,0xfb, 0x07,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x0f,0xfb, 0x01,0x8b, 0x0f,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x04,0xfd, 0x01,0x8b, 0x0b,0xfb, 0x01,0x36, 0x01,0x00, 0x1c,0xfb, 0x01,0x72, 0x2e,0xfd, 
+0x01,0x00, 0x01,0x41, 0x27,0xfd, 0x01,0x41, 0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x01,0x55, 0x70,0xfd, 
+0x01,0x41, 0x01,0x00, 0x12,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x55, 0x01,0x2b, 0x3d,0xfd, 
+0x01,0x86, 0x0e,0xfb, 0x01,0x00, 0x01,0x2b, 0x18,0xfb, 0x01,0x8b, 0x02,0xfd, 0x01,0x2b, 0x01,0x55, 
+0x11,0xfd, 0x01,0x85, 0x12,0xfb, 0x07,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x0e,0xfb, 0x01,0x36, 
+0x01,0x47, 0x01,0x85, 0x0e,0xfd, 0x01,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x8b, 0x0a,0xfb, 0x01,0x47, 
+0x01,0x2b, 0x1d,0xfb, 0x01,0x86, 0x2d,0xfd, 0x01,0x00, 0x01,0x41, 0x27,0xfd, 0x01,0x41, 0x01,0x00, 
+0x07,0xfd, 0x01,0x2b, 0x01,0x6c, 0x70,0xfd, 0x01,0x41, 0x01,0x00, 0x12,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x42,0xfd, 0x01,0x79, 0x0e,0xfb, 0x01,0x00, 0x01,0x2b, 0x17,0xfb, 0x01,0x87, 0x14,0xfd, 0x01,0x8b, 
+0x01,0x82, 0x13,0xfb, 0x07,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x0e,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x82, 0x01,0x8b, 0x0c,0xfd, 0x01,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x87, 0x28,0xfb, 
+0x01,0x79, 0x2d,0xfd, 0x01,0x00, 0x01,0x41, 0x27,0xfd, 0x01,0x41, 0x01,0x00, 0x75,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x19, 
+0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 
+0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x55, 0x01,0x19, 0x02,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 
+0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 0x01,0x00, 
+0x01,0x19, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x83, 
+0x05,0x00, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x8b, 0x01,0x03, 0x03,0x00, 
+0x01,0x59, 0x02,0xfb, 0x01,0x00, 0x01,0x12, 0x03,0x00, 0x01,0x59, 0x01,0xfb, 0x04,0x00, 0x01,0x22, 
+0x01,0xfb, 0x01,0x36, 0x03,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x12, 0x03,0x00, 0x01,0x59, 
+0x02,0xfb, 0x01,0x36, 0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x03,0xfd, 
+0x01,0x19, 0x03,0x00, 0x01,0x83, 0x05,0xfd, 0x01,0x8b, 0x01,0x00, 0x01,0x2b, 0x03,0x00, 0x01,0x03, 
+0x03,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x36, 0x02,0x00, 
+0x01,0x2b, 0x03,0xfd, 0x01,0x19, 0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x04,0x00, 
+0x01,0x36, 0x02,0xfb, 0x01,0x00, 0x01,0x12, 0x03,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x03,0x00, 
+0x01,0x22, 0x01,0xfb, 0x01,0x8b, 0x03,0xfd, 0x01,0x00, 0x01,0x07, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 
+0x01,0x2b, 0x03,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 
+0x01,0x03, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x12, 0x03,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x8b, 
+0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x2e, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0x19, 0x02,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 
+0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x19, 0x03,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 
+0x07,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2e, 0x03,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x19, 0x03,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x03,0x00, 
+0x01,0x83, 0x5d,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x6c, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0x83, 0x01,0x00, 0x01,0x19, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x19, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x07, 
+0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x07, 0x01,0xfd, 0x02,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x07, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x02,0xfd, 0x01,0x41, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x6c, 
+0x02,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x83, 0x01,0x00, 0x01,0x19, 0x05,0xfd, 0x01,0x32, 
+0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x02,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x22, 0x01,0x59, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x47, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x02,0x00, 0x01,0x22, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x59, 0x02,0x00, 0x01,0x59, 0x01,0x8b, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x04,0xfd, 0x01,0x8b, 0x01,0xfb, 0x02,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x12, 0x01,0x00, 
+0x01,0x47, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0x59, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x22, 
+0x02,0x00, 0x01,0x47, 0x01,0x36, 0x01,0x00, 0x01,0x52, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2c, 0x01,0x59, 0x01,0xfb, 0x02,0x00, 
+0x02,0xfb, 0x02,0x00, 0x01,0x22, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x04,0xfb, 0x01,0x8b, 0x02,0xfd, 0x02,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x36, 0x01,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x47, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x02,0x59, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 
+0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x2b, 0x01,0x59, 0x02,0xfb, 0x01,0x00, 
+0x01,0x03, 0x01,0xfb, 0x02,0x59, 0x02,0xfb, 0x01,0x81, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 
+0x01,0xfd, 0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 
+0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 0x01,0x6c, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x02,0x00, 0x01,0x41, 0x01,0x83, 0x01,0x00, 0x01,0x07, 0x5c,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x41, 
+0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x02,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 
+0x01,0x00, 0x03,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 
+0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0x41, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x02,0x00, 0x02,0x22, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 
+0x01,0x00, 0x01,0x12, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 
+0x01,0x03, 0x01,0x00, 0x03,0xfb, 0x01,0x03, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x12, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x82, 0x03,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0x41, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 0x01,0x07, 
+0x01,0x00, 0x03,0xfd, 0x01,0x87, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0x22, 0x02,0x00, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x59, 
+0x02,0xfb, 0x01,0x00, 0x01,0x3e, 0x01,0xfd, 0x02,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 
+0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x12, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x05,0xfb, 0x01,0x87, 0x01,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 
+0x01,0x83, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x82, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 0x01,0x47, 0x03,0xfb, 
+0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0x22, 0x02,0x00, 0x01,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x59, 0x03,0xfb, 
+0x02,0x00, 0x01,0x36, 0x04,0xfb, 0x01,0x75, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x19, 0x01,0x83, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x41, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x05,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 0x01,0x07, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x01,0x2b, 0x01,0x6c, 0x07,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x2e, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 
+0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x5c,0xfd, 
+0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x05,0x00, 0x01,0x2b, 0x05,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0x55, 
+0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x41, 0x04,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 
+0x04,0xfd, 0x01,0x41, 0x04,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x05,0x00, 0x01,0x2b, 0x04,0xfd, 0x01,0x8b, 0x06,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 
+0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x03,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x7c, 0x04,0xfd, 0x05,0x00, 0x01,0x2b, 0x01,0xfd, 0x06,0x00, 
+0x02,0xfd, 0x01,0x7e, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x05,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x3e, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0xf7, 0x04,0x00, 0x02,0xfb, 
+0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x06,0xfb, 
+0x01,0x7e, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x7c, 0x01,0x22, 
+0x02,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x05,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 
+0x01,0x47, 0x03,0x00, 0x01,0x59, 0x03,0xfb, 0x01,0x8b, 0x02,0xfd, 0x01,0x19, 0x02,0x00, 0x01,0x19, 
+0x02,0xfd, 0x05,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x00, 0x01,0x41, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x06,0x00, 0x02,0xfd, 
+0x01,0x41, 0x02,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 
+0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x06,0x00, 0x02,0xfd, 
+0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x5c,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x07, 0x09,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 
+0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x07, 
+0x08,0xfd, 0x01,0x80, 0x02,0x00, 0x06,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x03, 0x01,0x00, 0x03,0xfb, 0x01,0x03, 0x01,0x00, 
+0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x03, 0x01,0x00, 
+0x05,0xfd, 0x01,0x00, 0x01,0x07, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x84, 0x04,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x05,0xfb, 
+0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x3e, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x07,0xfb, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x02,0xfb, 
+0x01,0x22, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 
+0x01,0x00, 0x06,0xfb, 0x01,0x47, 0x02,0x00, 0x03,0xfb, 0x01,0x80, 0x04,0xfd, 0x01,0x07, 0x01,0x00, 
+0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x07, 0x05,0xfd, 0x02,0x2b, 0x05,0xfd, 0x01,0x00, 0x01,0x19, 
+0x03,0xfd, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x08,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x07, 0x05,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 
+0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2e, 0x01,0x00, 0x06,0xfd, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x19, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x5d,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x83, 0x01,0x41, 0x05,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x6c, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0xfd, 0x01,0x55, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 
+0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x02,0x00, 0x01,0x41, 0x01,0x2b, 0x02,0x00, 
+0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x41, 0x04,0xfd, 0x01,0x75, 
+0x01,0x36, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x12, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x41, 0x01,0xfd, 0x01,0x07, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 
+0x02,0xfd, 0x01,0x2c, 0x01,0x85, 0x05,0xfb, 0x02,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x22, 0x01,0xfb, 
+0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x3e, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x6c, 
+0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x59, 0x01,0x47, 
+0x02,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x02,0x00, 
+0x07,0xfb, 0x02,0x00, 0x01,0x69, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x6c, 
+0x01,0x36, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x22, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 
+0x01,0x36, 0x01,0x47, 0x02,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x01,0x12, 
+0x02,0x59, 0x02,0x00, 0x03,0xfb, 0x01,0x75, 0x01,0xfd, 0x02,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x41, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x6c, 0x01,0x55, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 0x01,0xfd, 0x01,0x6c, 
+0x01,0x41, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x19, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0x41, 
+0x02,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x5d,0xfd, 0x01,0x55, 0x03,0x00, 
+0x01,0x07, 0x01,0x00, 0x03,0xfd, 0x01,0x07, 0x03,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x2b, 0x02,0x00, 
+0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x04,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x02,0x00, 0x01,0x2e, 0x02,0x00, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 
+0x04,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2e, 0x02,0x00, 0x01,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 
+0x02,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x07, 0x03,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x8b, 0x02,0xfb, 
+0x01,0x22, 0x04,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x36, 0x03,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 
+0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x70, 0x01,0x53, 0x03,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x07, 0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x41, 0x04,0x00, 0x06,0xfb, 0x05,0x00, 0x01,0x36, 
+0x03,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 
+0x01,0x3e, 0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0x12, 0x02,0x00, 0x01,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x36, 0x02,0x00, 0x01,0x22, 0x05,0xfb, 0x01,0x00, 0x01,0x2b, 0x03,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x02,0x00, 0x01,0x19, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x6c, 0x03,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x2b, 
+0x03,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x36, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 
+0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x04,0x00, 0x01,0x59, 0x04,0xfb, 0x01,0x8b, 0x01,0x2e, 0x03,0x00, 
+0x01,0x19, 0x03,0xfd, 0x01,0x07, 0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2e, 0x03,0x00, 0x01,0x2e, 
+0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x2e, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x41, 
+0x04,0x00, 0x01,0xfd, 0x01,0x6c, 0x03,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 
+0x02,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x2e, 0x01,0x00, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 
+0x02,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x41, 0x04,0x00, 0x02,0xfd, 
+0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x80,0xa9,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x0b,0xfd, 0x01,0x84, 0x25,0xfb, 0x01,0x8b, 0x11,0xfd, 0x01,0x87, 0x07,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x13,0xfb, 0x0c,0xfd, 0x17,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x87, 0x11,0xfd, 0x01,0x8b, 
+0x26,0xfb, 0x01,0x84, 0x81,0x12,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x6c, 0x0b,0xfd, 
+0x01,0x7a, 0x25,0xfb, 0x11,0xfd, 0x01,0x8b, 0x08,0xfb, 0x01,0x00, 0x01,0x2b, 0x13,0xfb, 0x0c,0xfd, 
+0x17,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x8b, 0x11,0xfd, 0x26,0xfb, 0x01,0x7a, 0x81,0x12,0xfd, 
+0x01,0x6c, 0x01,0x07, 0x01,0x2b, 0x01,0x07, 0x01,0x83, 0x0c,0xfd, 0x01,0x6f, 0x24,0xfb, 0x01,0x8b, 
+0x10,0xfd, 0x01,0x8b, 0x09,0xfb, 0x01,0x03, 0x01,0x22, 0x13,0xfb, 0x0c,0xfd, 0x17,0xfb, 0x01,0x2b, 
+0x01,0x47, 0x03,0xfb, 0x01,0x8b, 0x10,0xfd, 0x01,0x8b, 0x25,0xfb, 0x01,0x6f, 0x81,0x22,0xfd, 
+0x01,0x8b, 0x24,0xfb, 0x01,0x78, 0x10,0xfd, 0x01,0x8b, 0x1f,0xfb, 0x0c,0xfd, 0x1d,0xfb, 0x01,0x8b, 
+0x10,0xfd, 0x01,0x78, 0x25,0xfb, 0x01,0x8b, 0x81,0x21,0xfd, 0x01,0x82, 0x24,0xfb, 0x01,0x8b, 
+0x10,0xfd, 0x01,0x80, 0x1f,0xfb, 0x0c,0xfd, 0x1d,0xfb, 0x01,0x80, 0x10,0xfd, 0x01,0x8b, 0x25,0xfb, 
+0x01,0x82, 0x81,0x1a,0xfd, 0x01,0x6c, 0x01,0x55, 0x05,0xfd, 0x01,0x79, 0x07,0xfb, 0x01,0x59, 
+0x01,0x22, 0x1b,0xfb, 0x10,0xfd, 0x01,0x8b, 0x08,0xfb, 0x01,0x47, 0x01,0x36, 0x15,0xfb, 0x01,0x59, 
+0x01,0x3e, 0x0b,0xfd, 0x17,0xfb, 0x01,0x47, 0x01,0x36, 0x05,0xfb, 0x01,0x8b, 0x10,0xfd, 0x25,0xfb, 
+0x01,0x79, 0x81,0x1a,0xfd, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x70, 0x07,0xfb, 0x01,0x22, 
+0x01,0x00, 0x1a,0xfb, 0x01,0x7d, 0x10,0xfd, 0x09,0xfb, 0x01,0x2b, 0x01,0x00, 0x15,0xfb, 0x01,0x00, 
+0x01,0x16, 0x03,0xfd, 0x01,0x00, 0x01,0x55, 0x06,0xfd, 0x04,0xfb, 0x01,0x00, 0x01,0x36, 0x06,0xfb, 
+0x01,0x03, 0x01,0x2b, 0x09,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x03, 0x02,0xfb, 
+0x10,0xfd, 0x01,0x7d, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x21,0xfb, 0x01,0x70, 0x81,0x1a,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x8b, 0x08,0xfb, 0x01,0x22, 0x01,0x00, 0x17,0xfb, 0x01,0x22, 
+0x01,0x59, 0x01,0xfb, 0x01,0x8b, 0x0f,0xfd, 0x01,0x8b, 0x09,0xfb, 0x01,0x2b, 0x01,0x00, 0x14,0xfb, 
+0x02,0x03, 0x04,0xfd, 0x01,0x2b, 0x01,0x6c, 0x06,0xfd, 0x04,0xfb, 0x01,0x2b, 0x01,0x47, 0x01,0xfb, 
+0x01,0x59, 0x01,0x22, 0x03,0xfb, 0x01,0x22, 0x01,0x03, 0x09,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 
+0x01,0x03, 0x01,0x22, 0x02,0xfb, 0x01,0x8b, 0x0c,0xfd, 0x01,0x83, 0x01,0x41, 0x01,0xfd, 0x01,0x8b, 
+0x01,0xfb, 0x01,0x47, 0x01,0x2b, 0x22,0xfb, 0x01,0x8b, 0x81,0x19,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x04,0xfd, 0x01,0x88, 0x08,0xfb, 0x01,0x22, 0x01,0x00, 0x17,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0x7e, 
+0x10,0xfd, 0x0a,0xfb, 0x01,0x2b, 0x01,0x00, 0x16,0xfb, 0x0c,0xfd, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 
+0x0e,0xfb, 0x01,0x2b, 0x01,0x00, 0x07,0xfb, 0x0c,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x7e, 
+0x24,0xfb, 0x01,0x88, 0x80,0xc8,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0x19, 0x01,0x00, 
+0x04,0xfd, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x19, 0x03,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x41, 
+0x05,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x05,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x03, 0x06,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x12, 
+0x03,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x36, 0x03,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 
+0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x04,0x00, 0x02,0xfd, 0x01,0x19, 0x03,0x00, 0x01,0x19, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x02,0x00, 0x01,0x2b, 0x01,0x80, 0x06,0xfb, 0x01,0x36, 
+0x05,0x00, 0x02,0xfb, 0x01,0x59, 0x03,0x00, 0x01,0x03, 0x06,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 
+0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x03, 0x03,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x02,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 
+0x01,0xfb, 0x04,0x00, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x03, 
+0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x03,0x00, 
+0x02,0xfd, 0x01,0x2e, 0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x04,0x00, 0x01,0x8b, 0x01,0x22, 0x01,0x00, 
+0x03,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x03, 0x02,0x00, 
+0x01,0x03, 0x12,0xfb, 0x01,0x80, 0x80,0xc8,0xfd, 0x01,0x41, 0x01,0x6c, 0x01,0xfd, 0x01,0x07, 
+0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x6c, 0x01,0x00, 0x01,0x19, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x6c, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x01,0x19, 0x02,0xfd, 
+0x01,0x19, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x02,0x00, 0x01,0x41, 
+0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x7a, 0x01,0x36, 0x01,0x00, 
+0x01,0x47, 0x05,0xfb, 0x01,0x22, 0x02,0x00, 0x01,0x47, 0x01,0x59, 0x02,0x00, 0x01,0xfb, 0x01,0x59, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 
+0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x6c, 
+0x01,0x55, 0x01,0x00, 0x01,0x36, 0x05,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 
+0x02,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x47, 0x05,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x6c, 0x01,0x52, 0x01,0x00, 
+0x01,0x36, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x47, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x47, 0x01,0xfd, 
+0x01,0x6c, 0x02,0xfd, 0x02,0x55, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x47, 0x01,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x59, 0x01,0x2b, 0x01,0x00, 
+0x12,0xfb, 0x01,0x7a, 0x80,0xcb,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 0x01,0x07, 0x01,0x00, 
+0x04,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x55, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2e, 0x04,0xfd, 
+0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x07,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x01,0x28, 0x01,0x22, 0x01,0x00, 
+0x01,0x2b, 0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x12, 0x01,0x00, 0x01,0xfb, 0x01,0x03, 
+0x01,0x00, 0x03,0xfb, 0x01,0x03, 0x01,0x00, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 
+0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfd, 0x02,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x22, 0x05,0xfb, 0x01,0x03, 
+0x01,0x00, 0x03,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x12, 0x02,0x22, 
+0x01,0x00, 0x01,0x2b, 0x05,0xfb, 0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x02,0x00, 0x02,0x22, 0x01,0xf7, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 
+0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 0x01,0x5d, 0x07,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 
+0x01,0x03, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 
+0x01,0x00, 0x12,0xfb, 0x01,0x73, 0x80,0xc8,0xfd, 0x01,0x41, 0x04,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x6c, 0x01,0x55, 0x01,0x00, 0x02,0xfd, 0x06,0x00, 0x03,0xfd, 0x01,0x2e, 0x01,0x00, 
+0x01,0x2e, 0x07,0xfd, 0x01,0x83, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfd, 0x01,0x41, 0x05,0x00, 0x01,0x03, 0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x22, 
+0x01,0x00, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x39, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 
+0x01,0x22, 0x05,0xfb, 0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x22, 
+0x05,0x00, 0x01,0x03, 0x05,0xfb, 0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x06,0x00, 0x02,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 
+0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 
+0x04,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x22, 
+0x02,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x04,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x03,0xfd, 0x01,0x39, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x13,0xfb, 0x80,0xc7,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x03,0xfd, 0x02,0x2b, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x02,0x2b, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x02,0x2b, 0x01,0x07, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x19, 0x0a,0xfd, 0x01,0x83, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x4d, 
+0x09,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x03, 0x01,0x00, 0x01,0xfb, 0x01,0x03, 0x01,0x00, 
+0x03,0xfb, 0x01,0x03, 0x01,0x00, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x59, 0x01,0x00, 
+0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x40, 0x02,0xfd, 0x02,0x2b, 0x03,0xfd, 0x02,0x2b, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x87, 0x01,0x00, 0x01,0x22, 0x05,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x03,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x36, 0x09,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x03,0xfb, 0x02,0x00, 0x02,0xfb, 0x04,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 
+0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x04,0xfb, 
+0x01,0x22, 0x01,0x00, 0x01,0x06, 0x01,0xfd, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x40, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x03, 
+0x03,0xfb, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 
+0x13,0xfb, 0x01,0x8b, 0x80,0xc6,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x01,0x83, 0x01,0x2b, 
+0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x01,0x6c, 0x02,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x19, 
+0x02,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 0x01,0xfd, 
+0x01,0x55, 0x01,0x00, 0x01,0x2b, 0x09,0xfd, 0x01,0x41, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x47, 
+0x01,0x36, 0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x2b, 0x01,0x59, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x36, 0x01,0x00, 0x01,0x36, 0x01,0x47, 0x02,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x07, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0xfb, 0x01,0x00, 0x01,0x22, 0x05,0xfb, 0x01,0x47, 0x01,0x00, 
+0x01,0x12, 0x01,0xfb, 0x01,0x03, 0x02,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x47, 
+0x01,0x36, 0x05,0xfb, 0x01,0x2b, 0x01,0x00, 0x03,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0xfd, 0x01,0x2e, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x36, 
+0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x36, 0x01,0x59, 0x01,0x2b, 
+0x01,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x47, 0x01,0x22, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x16, 0x01,0xfd, 0x01,0x00, 0x01,0x07, 
+0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 
+0x01,0x2b, 0x0f,0xfb, 0x01,0x8b, 0x80,0xc7,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2e, 0x02,0x00, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x2b, 0x02,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x04,0xfd, 0x01,0x41, 0x04,0x00, 0x01,0xfd, 0x01,0x2b, 
+0x05,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x19, 0x02,0x00, 
+0x01,0x19, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x12, 0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x2b, 
+0x02,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x36, 0x03,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x2b, 0x02,0x00, 
+0x01,0x36, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x09, 0x02,0x00, 0x02,0xfd, 0x01,0x19, 0x03,0x00, 
+0x01,0x19, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0xfb, 0x01,0x00, 0x01,0x22, 0x06,0xfb, 
+0x01,0x03, 0x03,0x00, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x59, 0x01,0x2b, 0x03,0x00, 0x01,0x12, 
+0x05,0xfb, 0x01,0x2b, 0x01,0x00, 0x04,0xfb, 0x01,0x22, 0x04,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 
+0x02,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x02,0x00, 
+0x01,0x12, 0x02,0x00, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x47, 0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x02,0x00, 0x02,0x2b, 0x01,0x00, 0x01,0x55, 
+0x01,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfb, 0x01,0x2b, 0x03,0x00, 
+0x01,0x36, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x0f,0xfb, 0x01,0x87, 0x80,0xce,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x10,0xfd, 0x01,0x00, 0x01,0x41, 0x33,0xfd, 0x01,0x82, 0x22,0xfb, 0x01,0x82, 0x0e,0xfd, 
+0x01,0x8b, 0x25,0xfb, 0x0c,0xfd, 0x23,0xfb, 0x01,0x8b, 0x0e,0xfd, 0x01,0x82, 0x23,0xfb, 0x01,0x82, 
+0x80,0xce,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x0f,0xfd, 0x01,0x19, 
+0x01,0x00, 0x34,0xfd, 0x01,0x7d, 0x22,0xfb, 0x01,0x8b, 0x0e,0xfd, 0x26,0xfb, 0x0c,0xfd, 0x24,0xfb, 
+0x0e,0xfd, 0x01,0x8b, 0x23,0xfb, 0x01,0x7d, 0x80,0xce,0xfd, 0x01,0x41, 0x01,0x19, 0x06,0xfd, 
+0x01,0x41, 0x01,0x19, 0x0f,0xfd, 0x01,0x2e, 0x01,0x41, 0x34,0xfd, 0x01,0x7a, 0x22,0xfb, 0x01,0x8b, 
+0x0e,0xfd, 0x26,0xfb, 0x0c,0xfd, 0x24,0xfb, 0x0e,0xfd, 0x01,0x8b, 0x23,0xfb, 0x01,0x7a, 0x81,0x1d,0xfd, 
+0x01,0x77, 0x22,0xfb, 0x0e,0xfd, 0x01,0x89, 0x26,0xfb, 0x0c,0xfd, 0x24,0xfb, 0x01,0x89, 0x0e,0xfd, 
+0x23,0xfb, 0x01,0x77, 0x81,0x1d,0xfd, 0x01,0x74, 0x21,0xfb, 0x01,0x71, 0x0e,0xfd, 0x01,0x7d, 
+0x26,0xfb, 0x0c,0xfd, 0x24,0xfb, 0x01,0x7d, 0x0e,0xfd, 0x01,0x71, 0x22,0xfb, 0x01,0x74, 0x81,0x1d,0xfd, 
+0x01,0x71, 0x21,0xfb, 0x01,0x7d, 0x0e,0xfd, 0x01,0x73, 0x26,0xfb, 0x0c,0xfd, 0x24,0xfb, 0x01,0x73, 
+0x0e,0xfd, 0x01,0x7d, 0x22,0xfb, 0x01,0x71, 0x81,0x1d,0xfd, 0x01,0x6f, 0x21,0xfb, 0x01,0x84, 
+0x0e,0xfd, 0x27,0xfb, 0x0c,0xfd, 0x25,0xfb, 0x0e,0xfd, 0x01,0x84, 0x22,0xfb, 0x01,0x6f, 0x81,0x1d,0xfd, 
+0x01,0x6e, 0x21,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x27,0xfb, 0x0c,0xfd, 0x25,0xfb, 0x01,0x8b, 
+0x0d,0xfd, 0x01,0x8b, 0x22,0xfb, 0x01,0x6e, 0x81,0x1d,0xfd, 0x01,0x6d, 0x21,0xfb, 0x01,0x8b, 
+0x0d,0xfd, 0x01,0x8b, 0x27,0xfb, 0x01,0x82, 0x0a,0xfd, 0x01,0x82, 0x25,0xfb, 0x01,0x8b, 0x0d,0xfd, 
+0x01,0x8b, 0x22,0xfb, 0x01,0x6d, 0x81,0x1d,0xfd, 0x22,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 
+0x28,0xfb, 0x0a,0xfd, 0x26,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x23,0xfb, 0x81,0x1d,0xfd, 
+0x22,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x28,0xfb, 0x01,0x75, 0x08,0xfd, 0x01,0x75, 0x26,0xfb, 
+0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x23,0xfb, 0x81,0x1d,0xfd, 0x22,0xfb, 0x01,0x8b, 0x0d,0xfd, 
+0x01,0x8b, 0x2a,0xfb, 0x01,0x82, 0x04,0xfd, 0x01,0x82, 0x28,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 
+0x23,0xfb, 0x81,0x1d,0xfd, 0x22,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x89, 0x58,0xfb, 0x01,0x89, 
+0x0d,0xfd, 0x01,0x8b, 0x23,0xfb, 0x81,0x1d,0xfd, 0x22,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x89, 
+0x58,0xfb, 0x01,0x89, 0x0d,0xfd, 0x01,0x8b, 0x23,0xfb, 0x81,0x1d,0xfd, 0x01,0x6d, 0x21,0xfb, 
+0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x58,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x22,0xfb, 0x01,0x6d, 
+0x81,0x1d,0xfd, 0x01,0x6e, 0x21,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x58,0xfb, 0x01,0x8b, 
+0x0d,0xfd, 0x01,0x8b, 0x22,0xfb, 0x01,0x6e, 0x81,0x1d,0xfd, 0x01,0x6f, 0x21,0xfb, 0x01,0x8b, 
+0x0d,0xfd, 0x01,0x8b, 0x58,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x22,0xfb, 0x01,0x6f, 0x81,0x1d,0xfd, 
+0x01,0x71, 0x21,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x58,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 
+0x22,0xfb, 0x01,0x71, 0x81,0x1d,0xfd, 0x01,0x74, 0x21,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 
+0x58,0xfb, 0x01,0x8b, 0x0d,0xfd, 0x01,0x8b, 0x22,0xfb, 0x01,0x74, 0x81,0x16,0xfd, 0x01,0x41, 
+0x01,0x83, 0x05,0xfd, 0x01,0x77, 0x21,0xfb, 0x01,0x84, 0x0e,0xfd, 0x58,0xfb, 0x0e,0xfd, 0x01,0x84, 
+0x22,0xfb, 0x01,0x77, 0x02,0xfd, 0x01,0x55, 0x01,0x6c, 0x35,0xfd, 0x01,0x41, 0x01,0x83, 0x80,0x8c,0xfd, 
+0x01,0x6c, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x2e, 0x02,0xfd, 0x01,0x2b, 0x01,0x19, 0x1a,0xfd, 
+0x02,0x6c, 0x01,0xfd, 0x01,0x41, 0x24,0xfd, 0x01,0x2b, 0x01,0x19, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x05,0xfd, 0x01,0x7a, 0x1a,0xfb, 0x01,0x22, 0x03,0x00, 0x01,0x2b, 0x01,0x47, 0x01,0xfb, 0x01,0x7d, 
+0x0e,0xfd, 0x01,0x73, 0x56,0xfb, 0x01,0x73, 0x0e,0xfd, 0x01,0x7d, 0x14,0xfb, 0x01,0x03, 0x01,0x2b, 
+0x04,0xfb, 0x01,0x2b, 0x01,0x03, 0x06,0xfb, 0x01,0x7a, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x1a,0xfd, 
+0x01,0x6c, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x2e, 0x02,0xfd, 0x01,0x2b, 0x01,0x19, 0x12,0xfd, 
+0x01,0x00, 0x01,0x41, 0x80,0x8c,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x41, 0x01,0x19, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x19, 0x01,0x41, 0x1a,0xfd, 0x02,0x19, 0x01,0xfd, 0x01,0x00, 0x24,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x7d, 0x19,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0x2b, 0x01,0x22, 0x01,0x12, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x71, 0x0e,0xfd, 0x01,0x7d, 
+0x15,0xfb, 0x01,0x36, 0x01,0x47, 0x35,0xfb, 0x01,0x59, 0x01,0x22, 0x08,0xfb, 0x01,0x7d, 0x07,0xfd, 
+0x01,0x55, 0x01,0x6c, 0x05,0xfd, 0x01,0x71, 0x14,0xfb, 0x01,0x2b, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x06,0xfb, 0x01,0x7d, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x41, 0x01,0x83, 
+0x16,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x41, 0x01,0x19, 0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x01,0x41, 
+0x12,0xfd, 0x01,0x00, 0x01,0x41, 0x80,0x8b,0xfd, 0x01,0x41, 0x01,0x00, 0x4a,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x82, 0x18,0xfb, 0x01,0x36, 0x01,0x00, 
+0x01,0x36, 0x07,0xfb, 0x0e,0xfd, 0x01,0x89, 0x15,0xfb, 0x01,0x00, 0x01,0x2b, 0x35,0xfb, 0x01,0x22, 
+0x01,0x00, 0x08,0xfb, 0x01,0x89, 0x07,0xfd, 0x01,0x00, 0x01,0x2b, 0x05,0xfd, 0x15,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x06,0xfb, 0x01,0x82, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x15,0xfd, 0x01,0x41, 0x01,0x00, 0x1a,0xfd, 0x01,0x00, 0x01,0x41, 
+0x80,0x8b,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x55, 0x03,0x00, 0x01,0x55, 0x06,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x55, 0x01,0x19, 
+0x02,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 
+0x01,0x55, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2e, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x19, 
+0x03,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x03,0x00, 0x01,0x83, 0x06,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x03,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x87, 0x01,0x00, 
+0x01,0x2b, 0x02,0x00, 0x02,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0x03, 0x02,0x00, 0x01,0x03, 0x06,0xfb, 0x01,0x2b, 0x01,0x00, 0x08,0xfb, 0x01,0x13, 0x03,0x00, 
+0x01,0x19, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2e, 0x02,0x00, 0x01,0x2b, 0x01,0x83, 0x03,0x00, 
+0x01,0x59, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x03,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 
+0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x36, 
+0x03,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x05,0xfb, 0x01,0x22, 0x01,0x00, 
+0x01,0x36, 0x02,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x03, 0x03,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x00, 
+0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x06,0xfb, 0x01,0x12, 0x03,0x00, 0x01,0x36, 0x01,0xfb, 
+0x04,0x00, 0x01,0xfb, 0x01,0x47, 0x04,0x00, 0x01,0xfc, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x19, 
+0x01,0x00, 0x02,0x2b, 0x03,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x36, 0x02,0xfb, 
+0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x36, 0x0a,0xfb, 0x01,0x2b, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x0e, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x04,0x00, 0x02,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 
+0x01,0x55, 0x05,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x55, 0x03,0x00, 0x01,0x55, 0x07,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x6c, 0x04,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x76,0xfd, 0x01,0x19, 0x02,0x00, 0x01,0x41, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x07, 
+0x01,0x00, 0x06,0xfd, 0x02,0x00, 0x01,0x07, 0x01,0xfd, 0x02,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x07, 
+0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x02,0xfd, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x02,0x83, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x02,0x00, 0x01,0x41, 
+0x01,0x83, 0x01,0x00, 0x01,0x07, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x02,0x00, 0x01,0x41, 
+0x01,0x83, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x8b, 0x02,0x00, 0x01,0x47, 0x02,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0x59, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x59, 0x01,0x2b, 
+0x01,0x00, 0x06,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x6c, 0x01,0x55, 0x02,0x00, 
+0x01,0x3e, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x02,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 
+0x02,0x00, 0x01,0x22, 0x06,0xfb, 0x01,0x22, 0x02,0x00, 0x01,0x47, 0x01,0x36, 0x01,0x00, 0x01,0x36, 
+0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x02,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 
+0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x06,0xfb, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x02,0x59, 0x01,0xfb, 
+0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x47, 0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0xf7, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x83, 0x01,0x00, 0x01,0x11, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x02,0x00, 0x0a,0xfb, 0x01,0x2b, 0x06,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x22, 0x01,0x47, 
+0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 
+0x01,0x07, 0x01,0xfd, 0x02,0x00, 0x06,0xfd, 0x01,0x19, 0x02,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x06,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x6c, 
+0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x07, 0x05,0xfd, 0x02,0x00, 0x01,0x83, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x77,0xfd, 0x01,0x6c, 0x02,0x00, 0x01,0x19, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x03,0x41, 0x01,0x00, 0x01,0x55, 
+0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x2e, 0x04,0xfd, 0x02,0x00, 0x01,0x55, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 0x01,0x07, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x8b, 
+0x01,0x00, 0x01,0x12, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0x22, 0x02,0x00, 0x01,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x06,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x8b, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 
+0x02,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x03, 0x01,0x00, 0x03,0x22, 0x01,0x00, 
+0x01,0x36, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x59, 0x02,0xfb, 
+0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x02,0x00, 0x02,0x22, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 
+0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x06,0xfb, 0x02,0x00, 0x01,0x36, 0x03,0xfb, 0x01,0x22, 
+0x01,0x00, 0x07,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x03,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x33, 0x02,0x22, 0x01,0x00, 0x01,0x36, 
+0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x0a,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x04,0x22, 0x01,0x00, 0x01,0x2b, 0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x03,0x41, 0x01,0x00, 0x01,0x55, 
+0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x07,0xfd, 0x01,0x6c, 0x02,0x00, 
+0x01,0x19, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x03,0x41, 0x01,0x00, 
+0x01,0x55, 0x05,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x04,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x79,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x6c, 0x01,0x2b, 
+0x02,0x00, 0x01,0x83, 0x01,0xfd, 0x06,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x22, 0x03,0xfb, 0x05,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x06,0xfb, 0x02,0x00, 0x07,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 
+0x01,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x2b, 0x05,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x06,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 
+0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x06,0xfb, 0x01,0x47, 0x03,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x01,0x59, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x04,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x0a,0xfb, 0x01,0x2b, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfb, 0x01,0x22, 0x04,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x09,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x6c, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x7a,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x0a,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x2e, 0x01,0x00, 0x04,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x04,0xfd, 
+0x01,0x6c, 0x02,0x00, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x22, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x05,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x06,0xfb, 0x01,0x03, 0x01,0x00, 0x01,0x47, 
+0x06,0xfb, 0x02,0x00, 0x03,0xfd, 0x02,0x2b, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 
+0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x47, 
+0x01,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x03, 0x01,0x00, 0x06,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 
+0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x02,0x00, 0x06,0xfb, 0x01,0x00, 
+0x01,0x22, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x08,0xfb, 0x01,0x47, 0x02,0x00, 0x01,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x02,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x04,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x70, 0x05,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x0a,0xfb, 0x01,0x2b, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x28, 0x01,0x00, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x06,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x0a,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x0a,0xfd, 0x01,0x00, 0x01,0x2e, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x19, 0x01,0x00, 0x01,0x55, 0x04,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x75,0xfd, 0x01,0x55, 0x01,0x19, 0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0xfd, 0x01,0x55, 
+0x01,0x6c, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0x41, 0x02,0x00, 0x02,0xfd, 0x01,0x41, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2e, 0x02,0x83, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x22, 0x03,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x22, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 
+0x01,0x00, 0x07,0xfb, 0x02,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x12, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 
+0x01,0x00, 0x01,0x3e, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x02,0x00, 0x01,0x47, 
+0x01,0x59, 0x02,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0x59, 0x02,0x00, 0x01,0x2b, 0x02,0xfb, 
+0x02,0x00, 0x02,0xfb, 0x01,0x59, 0x02,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x36, 0x01,0x47, 0x01,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 
+0x01,0x36, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x12, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0x59, 
+0x02,0x00, 0x01,0x2b, 0x06,0xfb, 0x01,0x12, 0x02,0x59, 0x02,0x00, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 
+0x01,0x36, 0x02,0xfb, 0x02,0x00, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x04,0xfd, 0x02,0x00, 0x02,0xfd, 0x01,0x83, 0x02,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x36, 
+0x01,0x47, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x02,0x03, 
+0x06,0xfb, 0x01,0x2b, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 
+0x01,0x36, 0x01,0x59, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0xfd, 0x01,0x55, 
+0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x55, 
+0x01,0x19, 0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0xfd, 0x01,0x55, 0x01,0x6c, 0x05,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x02,0x00, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x2e, 0x05,0xfd, 
+0x02,0x00, 0x01,0xfd, 0x01,0x07, 0x02,0x00, 0x75,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x04,0x00, 0x01,0x6c, 0x05,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0x2e, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x04,0x00, 
+0x01,0x83, 0x02,0xfd, 0x01,0x41, 0x04,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x22, 0x04,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x07,0xfb, 0x01,0x59, 0x01,0x2b, 0x04,0x00, 
+0x01,0x12, 0x02,0xfb, 0x01,0x03, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x03,0x00, 
+0x01,0x59, 0x02,0xfb, 0x01,0x03, 0x02,0x00, 0x01,0x03, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x36, 
+0x02,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x47, 0x04,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x22, 0x04,0x00, 
+0x02,0xfb, 0x01,0x03, 0x02,0x00, 0x01,0x03, 0x01,0x00, 0x01,0x2b, 0x06,0xfb, 0x04,0x00, 0x01,0x59, 
+0x02,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0xfb, 0x01,0x36, 0x02,0x00, 0x01,0x2b, 0x01,0x19, 0x01,0x00, 
+0x01,0x07, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x5d, 
+0x04,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 
+0x02,0x00, 0x06,0xfb, 0x01,0x2b, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 
+0x02,0x00, 0x01,0x1d, 0x02,0x00, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x02,0x00, 
+0x02,0xfd, 0x01,0x6c, 0x04,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x05,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x6c, 0x04,0x00, 0x01,0x6c, 0x05,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x2e, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x2b, 0x01,0x19, 0x01,0x00, 0x01,0x07, 0x06,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x02,0x00, 0x02,0x2b, 0x01,0x00, 0x80,0xcd,0xfd, 0x01,0x88, 
+0x23,0xfb, 0x0f,0xfd, 0x01,0x87, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x4c,0xfb, 0x01,0x87, 0x0f,0xfd, 
+0x24,0xfb, 0x01,0x88, 0x81,0x1f,0xfd, 0x01,0x8b, 0x23,0xfb, 0x0f,0xfd, 0x01,0x8b, 0x02,0xfb, 
+0x01,0x00, 0x01,0x22, 0x4c,0xfb, 0x01,0x8b, 0x0f,0xfd, 0x24,0xfb, 0x01,0x8b, 0x81,0x20,0xfd, 
+0x01,0x70, 0x22,0xfb, 0x01,0x8b, 0x0f,0xfd, 0x01,0x80, 0x01,0xfb, 0x01,0x2b, 0x01,0x47, 0x4b,0xfb, 
+0x01,0x80, 0x0f,0xfd, 0x01,0x8b, 0x23,0xfb, 0x01,0x70, 0x81,0x21,0xfd, 0x01,0x79, 0x22,0xfb, 
+0x01,0x7d, 0x10,0xfd, 0x4e,0xfb, 0x10,0xfd, 0x01,0x7d, 0x23,0xfb, 0x01,0x79, 0x81,0x21,0xfd, 
+0x01,0x82, 0x23,0xfb, 0x01,0x8b, 0x0f,0xfd, 0x01,0x89, 0x4c,0xfb, 0x01,0x89, 0x0f,0xfd, 0x01,0x8b, 
+0x24,0xfb, 0x01,0x82, 0x80,0xcd,0xfd, 0x01,0x83, 0x01,0x41, 0x31,0xfd, 0x01,0x83, 0x01,0x41, 
+0x0e,0xfd, 0x01,0x41, 0x01,0x83, 0x0f,0xfd, 0x01,0x8b, 0x23,0xfb, 0x01,0x7d, 0x10,0xfd, 0x1e,0xfb, 
+0x01,0x22, 0x01,0x59, 0x1a,0xfb, 0x01,0x36, 0x01,0x47, 0x10,0xfb, 0x10,0xfd, 0x01,0x7d, 0x08,0xfb, 
+0x01,0x36, 0x01,0x47, 0x16,0xfb, 0x01,0x22, 0x01,0x59, 0x02,0xfb, 0x01,0x8b, 0x18,0xfd, 0x01,0x41, 
+0x01,0x83, 0x16,0xfd, 0x01,0x83, 0x01,0x41, 0x16,0xfd, 0x01,0x6c, 0x01,0x55, 0x80,0x83,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x19, 0x01,0x2b, 0x0d,0xfd, 0x01,0x19, 0x04,0x00, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x19, 0x01,0x2b, 0x17,0xfd, 0x01,0x41, 0x01,0x00, 0x0e,0xfd, 0x01,0x00, 0x01,0x41, 
+0x10,0xfd, 0x01,0x6f, 0x1f,0xfb, 0x01,0x36, 0x01,0x00, 0x02,0xfb, 0x08,0xfd, 0x01,0x19, 0x01,0x2b, 
+0x06,0xfd, 0x01,0x8b, 0x0f,0xfb, 0x01,0x03, 0x02,0x00, 0x01,0x2b, 0x01,0x59, 0x09,0xfb, 0x01,0x00, 
+0x01,0x22, 0x1a,0xfb, 0x01,0x00, 0x01,0x2b, 0x0f,0xfb, 0x01,0x8b, 0x10,0xfd, 0x09,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x08,0xfb, 0x01,0x36, 0x02,0x59, 0x01,0x36, 0x0a,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 
+0x01,0x6f, 0x19,0xfd, 0x01,0x00, 0x01,0x41, 0x16,0xfd, 0x01,0x41, 0x01,0x00, 0x08,0xfd, 0x01,0x83, 
+0x01,0x55, 0x01,0xfd, 0x01,0x55, 0x01,0x83, 0x09,0xfd, 0x01,0x2b, 0x01,0x00, 0x80,0x83,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x19, 0x0d,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0x41, 
+0x01,0x55, 0x01,0xfd, 0x01,0x41, 0x01,0x19, 0x17,0xfd, 0x01,0x41, 0x01,0x00, 0x0e,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x41, 0x03,0xfd, 0x01,0x6c, 0x01,0x55, 0x08,0xfd, 0x01,0x7a, 
+0x08,0xfb, 0x01,0x36, 0x01,0x47, 0x15,0xfb, 0x01,0x47, 0x01,0x2b, 0x02,0xfb, 0x01,0x8b, 0x07,0xfd, 
+0x01,0x41, 0x01,0x19, 0x07,0xfd, 0x01,0x7e, 0x0d,0xfb, 0x01,0x03, 0x01,0x00, 0x01,0x12, 0x01,0x22, 
+0x01,0x2b, 0x01,0x36, 0x09,0xfb, 0x01,0x00, 0x01,0x22, 0x1a,0xfb, 0x01,0x00, 0x01,0x2b, 0x0e,0xfb, 
+0x01,0x7e, 0x10,0xfd, 0x01,0x8b, 0x09,0xfb, 0x01,0x00, 0x01,0x2b, 0x08,0xfb, 0x01,0x2b, 0x02,0x36, 
+0x01,0x2b, 0x0a,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x7a, 0x03,0xfd, 0x01,0x6c, 0x01,0x55, 
+0x14,0xfd, 0x01,0x00, 0x01,0x41, 0x16,0xfd, 0x01,0x41, 0x01,0x00, 0x08,0xfd, 0x01,0x55, 0x01,0x2b, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x55, 0x09,0xfd, 0x01,0x2b, 0x01,0x00, 0x80,0x83,0xfd, 0x01,0x41, 
+0x01,0x00, 0x11,0xfd, 0x01,0x2b, 0x01,0x00, 0x1e,0xfd, 0x01,0x41, 0x01,0x00, 0x0e,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x08,0xfd, 0x01,0x84, 
+0x08,0xfb, 0x01,0x00, 0x01,0x2b, 0x19,0xfb, 0x01,0x73, 0x10,0xfd, 0x01,0x8b, 0x0d,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x0d,0xfb, 0x01,0x00, 0x01,0x22, 0x1a,0xfb, 0x01,0x00, 0x01,0x2b, 0x0e,0xfb, 0x01,0x8b, 
+0x10,0xfd, 0x01,0x73, 0x09,0xfb, 0x01,0x00, 0x01,0x2b, 0x16,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 
+0x01,0x84, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x14,0xfd, 0x01,0x00, 0x01,0x41, 0x16,0xfd, 0x01,0x41, 
+0x01,0x00, 0x16,0xfd, 0x01,0x2b, 0x01,0x00, 0x7f,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x19, 0x06,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x55, 
+0x02,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x01,0x55, 0x02,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 0x04,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x04,0x00, 0x01,0x41, 0x03,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x2e, 0x03,0x00, 0x01,0x2b, 0x01,0x8b, 0x01,0xfb, 0x01,0x36, 0x03,0x00, 0x01,0x03, 0x01,0xfb, 
+0x01,0x2b, 0x03,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x36, 0x03,0x00, 0x01,0x36, 0x07,0xfb, 0x01,0x2b, 
+0x02,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x17, 
+0x02,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x05,0x00, 0x01,0x8b, 
+0x02,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x06,0xfb, 0x02,0x00, 0x01,0x36, 0x05,0xfb, 0x01,0x03, 
+0x03,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x36, 
+0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 
+0x01,0x36, 0x02,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x03, 0x04,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x36, 
+0x03,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x54, 0x06,0xfd, 0x01,0x83, 
+0x05,0x00, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x03, 0x04,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x03, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x59, 0x04,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 
+0x01,0xfb, 0x01,0xfa, 0x01,0x00, 0x01,0x55, 0x01,0x41, 0x03,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x2b, 
+0x03,0x00, 0x01,0x55, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 
+0x01,0x19, 0x03,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x07, 0x02,0x00, 0x05,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x2b, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x19, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0x19, 0x02,0x00, 0x01,0x19, 0x6c,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 
+0x01,0x6c, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x07, 0x01,0xfd, 0x02,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x6c, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0xfd, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x6c, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x6c, 
+0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x02,0x55, 0x01,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x54, 0x01,0x75, 0x02,0x00, 0x02,0xfb, 0x01,0x47, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x06,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0x59, 0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x6c, 0x02,0x00, 0x01,0xfd, 0x01,0x87, 0x01,0x2b, 0x01,0x00, 
+0x02,0x59, 0x01,0x00, 0x01,0x03, 0x05,0xfb, 0x01,0x59, 0x02,0x00, 0x01,0x2b, 0x01,0x59, 0x02,0xfb, 
+0x01,0x22, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x02,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0x47, 
+0x01,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 
+0x01,0x22, 0x02,0x00, 0x01,0x47, 0x01,0x36, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 
+0x01,0x22, 0x01,0xfb, 0x01,0x03, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x03, 
+0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x2b, 0x01,0x87, 0x02,0x00, 0x06,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x6c, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x59, 
+0x01,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x03, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x2b, 0x01,0x59, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x47, 0x02,0xfb, 
+0x01,0x00, 0x01,0x22, 0x01,0x4d, 0x01,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x07,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0x6c, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x06,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x01,0x83, 0x01,0x6c, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 
+0x01,0x83, 0x01,0xfd, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x02,0x2b, 0x03,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x2b, 0x01,0x83, 0x01,0x07, 0x01,0x00, 0x6b,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 
+0x02,0x41, 0x01,0x00, 0x01,0x07, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0x2e, 0x03,0xfd, 0x01,0x07, 0x01,0x00, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0x80, 0x02,0x00, 0x01,0x12, 0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x03, 0x01,0x00, 
+0x03,0x22, 0x01,0x00, 0x01,0x36, 0x05,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0x22, 0x02,0x00, 0x01,0xfb, 
+0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x8b, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x22, 0x02,0x00, 0x07,0xfb, 0x01,0x2b, 0x02,0x00, 
+0x01,0x59, 0x01,0xfb, 0x02,0x00, 0x02,0x22, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x12, 
+0x01,0x00, 0x01,0x03, 0x03,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 
+0x01,0x22, 0x01,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x02,0x00, 0x03,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x03, 0x01,0x00, 0x03,0x22, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x01,0x87, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x55, 0x01,0x00, 
+0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x22, 0x02,0x00, 
+0x01,0xfb, 0x02,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x59, 
+0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 
+0x01,0x47, 0x05,0xfb, 0x01,0x00, 0x01,0x12, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x07,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x00, 0x01,0x19, 
+0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0x41, 0x01,0x07, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2e, 0x06,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x19, 0x01,0x00, 
+0x01,0x83, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x02,0x41, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x6b,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x05,0x00, 0x01,0x19, 
+0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 
+0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x6c, 0x04,0x00, 0x01,0x41, 0x01,0x8b, 
+0x01,0x59, 0x01,0x2b, 0x02,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 
+0x05,0x00, 0x01,0x36, 0x05,0xfb, 0x05,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x01,0x71, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x05,0x00, 0x01,0x2b, 
+0x08,0xfb, 0x01,0x59, 0x02,0x00, 0x01,0xfb, 0x06,0x00, 0x02,0xfb, 0x03,0x00, 0x01,0x59, 0x03,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 
+0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x2b, 0x05,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x05,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 
+0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 
+0x06,0xfb, 0x03,0x00, 0x01,0x83, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x01,0x41, 
+0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x01,0xfd, 0x06,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x07, 
+0x03,0xfd, 0x01,0x41, 0x05,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x6b,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x09,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x04,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x05,0xfd, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x75, 
+0x01,0xfb, 0x01,0x59, 0x02,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x03, 0x01,0x00, 
+0x0a,0xfb, 0x01,0x00, 0x01,0x2b, 0x05,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfb, 0x01,0x8b, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0xf7, 0x01,0x84, 
+0x0c,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 0x02,0x00, 0x06,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0x00, 
+0x01,0x59, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x12, 0x01,0x00, 0x02,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfb, 0x01,0x03, 0x01,0x00, 0x06,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x05,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 
+0x01,0x8b, 0x01,0x00, 0x01,0x2b, 0x05,0xfb, 0x01,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x47, 0x05,0xfb, 0x01,0x00, 0x01,0x28, 0x02,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x19, 
+0x01,0xfd, 0x01,0x00, 0x01,0x2e, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x06,0xfd, 0x01,0x00, 0x01,0x41, 0x06,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2e, 
+0x01,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x6c,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x01,0x55, 
+0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x03,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x02,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x07, 
+0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x2e, 
+0x01,0xfd, 0x01,0x32, 0x01,0x47, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x02,0x00, 0x02,0xfb, 
+0x01,0x59, 0x02,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x36, 0x01,0x47, 0x05,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x01,0x3e, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 
+0x01,0x41, 0x01,0x2b, 0x02,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x41, 0x01,0x82, 0x01,0x59, 
+0x01,0x22, 0x05,0xfb, 0x01,0x2b, 0x01,0x22, 0x01,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 
+0x01,0x36, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x12, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0x59, 
+0x02,0x00, 0x02,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x59, 0x01,0x22, 0x02,0x00, 0x02,0xfb, 0x01,0x22, 
+0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x03, 0x01,0x00, 0x01,0x47, 0x01,0x59, 
+0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x59, 0x02,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x36, 
+0x01,0x47, 0x01,0x82, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x02,0x00, 
+0x01,0x41, 0x01,0x2b, 0x02,0x00, 0x01,0xfd, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x22, 0x01,0xfb, 
+0x01,0x59, 0x01,0x22, 0x01,0xfb, 0x01,0x03, 0x01,0x00, 0x01,0x47, 0x01,0x59, 0x01,0x2b, 0x01,0x00, 
+0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x02,0x00, 0x01,0xfb, 0x01,0x2b, 0x02,0x00, 
+0x02,0xfb, 0x02,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x12, 0x02,0xfb, 0x01,0x00, 0x01,0x32, 0x01,0x83, 
+0x02,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 
+0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x01,0x6c, 
+0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x2e, 
+0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x07,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x01,0x6c, 0x02,0x00, 
+0x01,0x41, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x02,0x83, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x55, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 
+0x01,0x6c, 0x01,0x55, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x6c,0xfd, 
+0x01,0x55, 0x03,0x00, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 
+0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x05,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 
+0x01,0x55, 0x02,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x2b, 0x01,0x19, 0x01,0x00, 0x01,0x07, 
+0x01,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0xfd, 0x01,0x83, 0x02,0x00, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x02,0x00, 0x02,0x2b, 0x01,0x00, 0x01,0x55, 0x01,0x2b, 0x03,0x00, 
+0x01,0x36, 0x02,0xfb, 0x01,0x36, 0x02,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x47, 0x04,0x00, 0x01,0x47, 
+0x06,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x01,0x2e, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 
+0x01,0x2b, 0x01,0x00, 0x02,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x07, 0x03,0x00, 0x01,0x2b, 0x05,0xfb, 
+0x01,0x12, 0x03,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x22, 0x04,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 
+0x01,0xfb, 0x01,0x59, 0x02,0x00, 0x01,0xfb, 0x01,0x59, 0x03,0x00, 0x01,0x12, 0x01,0x00, 0x02,0xfb, 
+0x01,0x22, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 
+0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x47, 0x04,0x00, 0x01,0x56, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x06,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0x2b, 0x01,0x00, 
+0x01,0x7c, 0x02,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x01,0x36, 0x02,0x00, 0x02,0x2b, 
+0x01,0x00, 0x02,0xfb, 0x01,0x59, 0x04,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x39, 0x01,0xfd, 0x01,0x83, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x02,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x2b, 0x03,0x00, 
+0x01,0x55, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x2e, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x41, 
+0x04,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x07,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x07, 0x01,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x01,0x00, 0x01,0x41, 
+0x02,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x07, 
+0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x80,0xc8,0xfd, 0x01,0x79, 0x25,0xfb, 0x01,0x82, 
+0x0a,0xfd, 0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x87, 0x38,0xfb, 0x01,0x87, 0x12,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x26,0xfb, 0x01,0x79, 0x81,0x29,0xfd, 0x01,0x86, 0x26,0xfb, 0x01,0x8b, 0x05,0xfd, 
+0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x6c, 0x08,0xfd, 0x01,0x87, 0x36,0xfb, 0x01,0x87, 0x0f,0xfd, 
+0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x47, 0x26,0xfb, 0x01,0x86, 0x81,0x2a,0xfd, 0x01,0x72, 
+0x25,0xfb, 0x01,0x7c, 0x05,0xfd, 0x01,0x6c, 0x01,0x07, 0x01,0x2b, 0x01,0x07, 0x01,0x83, 0x0a,0xfd, 
+0x01,0x8b, 0x34,0xfb, 0x01,0x8b, 0x10,0xfd, 0x01,0x6c, 0x01,0x07, 0x01,0x2b, 0x01,0x07, 0x01,0x66, 
+0x26,0xfb, 0x01,0x72, 0x81,0x2b,0xfd, 0x01,0x80, 0x26,0xfb, 0x01,0x87, 0x14,0xfd, 0x01,0x8b, 
+0x01,0x7e, 0x30,0xfb, 0x01,0x7e, 0x01,0x8b, 0x14,0xfd, 0x01,0x87, 0x27,0xfb, 0x01,0x80, 0x81,0x2b,0xfd, 
+0x01,0x8b, 0x01,0x6d, 0x26,0xfb, 0x01,0x8b, 0x15,0xfd, 0x01,0x8b, 0x2e,0xfb, 0x01,0x8b, 0x15,0xfd, 
+0x01,0x8b, 0x27,0xfb, 0x01,0x6d, 0x01,0x8b, 0x80,0xe8,0xfd, 0x01,0x83, 0x01,0x41, 0x42,0xfd, 
+0x01,0xfc, 0x27,0xfb, 0x01,0x8b, 0x16,0xfd, 0x01,0x89, 0x2a,0xfb, 0x01,0x89, 0x16,0xfd, 0x01,0x8b, 
+0x28,0xfb, 0x01,0xfc, 0x80,0xcf,0xfd, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x2e, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x19, 0x11,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x19, 0x01,0x2b, 
+0x0d,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x03,0xfd, 0x01,0x55, 0x01,0x2b, 0x29,0xfd, 0x01,0x8b, 
+0x0b,0xfb, 0x07,0x00, 0x01,0x2b, 0x15,0xfb, 0x01,0x8b, 0x17,0xfd, 0x01,0x80, 0x26,0xfb, 0x01,0x80, 
+0x17,0xfd, 0x01,0x8b, 0x29,0xfb, 0x01,0x8b, 0x80,0xcf,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x41, 
+0x01,0x19, 0x01,0x2b, 0x02,0xfd, 0x01,0x19, 0x01,0x41, 0x11,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 
+0x01,0x41, 0x01,0x19, 0x0d,0xfd, 0x01,0x41, 0x02,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x18,0xfd, 
+0x01,0x55, 0x01,0x6c, 0x0f,0xfd, 0x01,0x6b, 0x01,0x3f, 0x0a,0xfb, 0x03,0x22, 0x02,0x00, 0x02,0x22, 
+0x01,0x36, 0x0f,0xfb, 0x01,0x22, 0x01,0x59, 0x05,0xfb, 0x01,0x8b, 0x17,0xfd, 0x01,0x8b, 0x01,0x87, 
+0x22,0xfb, 0x01,0x87, 0x01,0x8b, 0x17,0xfd, 0x01,0x8b, 0x29,0xfb, 0x01,0x7b, 0x80,0xcf,0xfd, 
+0x01,0x41, 0x01,0x00, 0x19,0xfd, 0x01,0x41, 0x01,0x00, 0x11,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x2e, 
+0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x18,0xfd, 0x01,0x00, 0x01,0x2b, 0x0f,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x0d,0xfb, 0x01,0x00, 0x01,0x2b, 0x12,0xfb, 0x01,0x00, 0x01,0x22, 0x05,0xfb, 0x01,0x6e, 0x01,0x8b, 
+0x19,0xfd, 0x01,0x89, 0x1e,0xfb, 0x01,0x89, 0x19,0xfd, 0x01,0x8b, 0x01,0x6e, 0x29,0xfb, 0x01,0x8b, 
+0x80,0xcf,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x55, 0x03,0x00, 0x01,0x55, 0x06,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 0x01,0x19, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x03,0x00, 
+0x01,0x19, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x55, 
+0x03,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x41, 0x01,0xfd, 0x04,0x00, 0x01,0x55, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x01,0x41, 0x03,0x00, 0x01,0x2b, 0x0b,0xfb, 0x01,0x00, 
+0x01,0x2b, 0x04,0xfb, 0x01,0x2b, 0x03,0x00, 0x01,0x03, 0x02,0xfb, 0x01,0x12, 0x03,0x00, 0x01,0x36, 
+0x01,0xfb, 0x04,0x00, 0x02,0xfb, 0x01,0x03, 0x03,0x00, 0x01,0x7a, 0x1b,0xfd, 0x01,0x8b, 0x18,0xfb, 
+0x01,0x8b, 0x1b,0xfd, 0x01,0x8b, 0x2a,0xfb, 0x01,0x7c, 0x80,0xd1,0xfd, 0x01,0x19, 0x02,0x00, 
+0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 
+0x01,0x07, 0x01,0x00, 0x06,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x01,0x6c, 0x02,0x00, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 
+0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2e, 0x01,0x83, 0x01,0xfd, 0x02,0x00, 0x02,0xfd, 
+0x02,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x8b, 0x0c,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x04,0xfb, 0x01,0x22, 0x01,0x47, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x03, 
+0x01,0xfb, 0x02,0x59, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x01,0x36, 
+0x01,0xfb, 0x02,0x00, 0x01,0x8b, 0x1c,0xfd, 0x01,0x8b, 0x01,0x89, 0x01,0x7c, 0x10,0xfb, 0x01,0x7c, 
+0x01,0x89, 0x01,0x8b, 0x1c,0xfd, 0x01,0x8b, 0x2b,0xfb, 0x01,0x8b, 0x80,0xd2,0xfd, 0x01,0x6c, 
+0x02,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x03,0x41, 
+0x01,0x00, 0x01,0x55, 0x04,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x02,0x41, 0x01,0x00, 
+0x01,0x07, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0x41, 
+0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x02,0x41, 0x01,0x00, 0x01,0x07, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2e, 
+0x04,0xfd, 0x01,0x00, 0x01,0x2b, 0x06,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x7d, 0x01,0xfb, 0x01,0x36, 0x04,0x22, 0x01,0x36, 
+0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x07,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x02,0x00, 0x01,0x36, 
+0x04,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x02,0x00, 0x02,0x22, 0x01,0x2b, 0x01,0x00, 0x01,0xfb, 
+0x01,0x8b, 0x20,0xfd, 0x04,0x8b, 0x04,0x89, 0x04,0x8b, 0x20,0xfd, 0x01,0x8b, 0x2b,0xfb, 0x01,0x7d, 
+0x80,0xd5,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x2b, 0x05,0x00, 0x01,0x55, 0x04,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x05,0x00, 0x01,0x19, 0x05,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x05,0x00, 
+0x01,0x19, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 
+0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x07, 0x04,0x00, 
+0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x8b, 0x01,0x70, 
+0x01,0x2b, 0x04,0x00, 0x01,0x2b, 0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x04,0xfb, 0x01,0x22, 0x04,0x00, 
+0x02,0xfb, 0x01,0x47, 0x03,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x06,0x00, 
+0x02,0xfb, 0x01,0x8b, 0x4a,0xfd, 0x01,0x8b, 0x2b,0xfb, 0x01,0x70, 0x01,0x8b, 0x80,0xd6,0xfd, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x09,0xfd, 
+0x01,0x55, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x09,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x01,0x2e, 0x01,0x00, 0x04,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x81, 0x0a,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x04,0xfb, 0x01,0x47, 
+0x02,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 0x02,0x00, 0x07,0xfb, 0x01,0x87, 0x48,0xfd, 
+0x01,0x87, 0x2c,0xfb, 0x01,0x81, 0x80,0xd2,0xfd, 0x01,0x55, 0x01,0x19, 0x01,0x6c, 0x01,0xfd, 
+0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 
+0x01,0x2b, 0x01,0x83, 0x01,0xfd, 0x01,0x55, 0x01,0x6c, 0x05,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x41, 0x02,0x00, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0xfd, 
+0x01,0x6c, 0x01,0x55, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x2e, 0x02,0x00, 0x02,0xfd, 
+0x02,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x6c, 0x01,0x55, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 
+0x01,0x41, 0x02,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x6c, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 
+0x02,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0x6c, 0x02,0x00, 0x02,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x03,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x8b, 0x01,0x75, 0x09,0xfb, 
+0x01,0x00, 0x01,0x2b, 0x03,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x36, 0x01,0x59, 0x01,0x2b, 0x01,0x00, 
+0x01,0x59, 0x01,0xfb, 0x01,0x12, 0x02,0x59, 0x02,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 
+0x01,0x36, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 0x01,0x12, 0x02,0xfb, 0x01,0x2b, 0x01,0x22, 0x01,0x7a, 
+0x01,0x8b, 0x44,0xfd, 0x01,0x8b, 0x01,0x7a, 0x2c,0xfb, 0x01,0x75, 0x01,0x8b, 0x80,0xd2,0xfd, 
+0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x6c, 
+0x04,0x00, 0x01,0x6c, 0x05,0xfd, 0x01,0x55, 0x03,0x00, 0x01,0x07, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 
+0x04,0xfd, 0x02,0x00, 0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x03,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x83, 
+0x03,0x00, 0x01,0x2e, 0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x55, 
+0x02,0x00, 0x01,0x41, 0x01,0x83, 0x03,0x00, 0x01,0x2e, 0x02,0x00, 0x01,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x83, 0x02,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x88, 0x09,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x04,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x12, 0x02,0x00, 0x01,0xfb, 0x04,0x00, 0x01,0x59, 0x02,0xfb, 
+0x01,0x03, 0x02,0x00, 0x02,0xfb, 0x01,0x22, 0x04,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x2b, 0x02,0xfb, 
+0x01,0x82, 0x42,0xfd, 0x01,0x82, 0x2e,0xfb, 0x01,0x88, 0x81,0x38,0xfd, 0x01,0xfc, 0x2d,0xfb, 
+0x01,0x7c, 0x40,0xfd, 0x01,0x7c, 0x2e,0xfb, 0x01,0xfc, 0x81,0x39,0xfd, 0x01,0x8b, 0x01,0x72, 
+0x2e,0xfb, 0x01,0x85, 0x3c,0xfd, 0x01,0x85, 0x2f,0xfb, 0x01,0x72, 0x01,0x8b, 0x81,0x3a,0xfd, 
+0x01,0x85, 0x2f,0xfb, 0x01,0x6e, 0x01,0x8b, 0x38,0xfd, 0x01,0x8b, 0x01,0x6e, 0x30,0xfb, 0x01,0x85, 
+0x81,0x3c,0xfd, 0x01,0xfc, 0x31,0xfb, 0x01,0x8b, 0x34,0xfd, 0x01,0x8b, 0x32,0xfb, 0x01,0xfc, 
+0x81,0x3d,0xfd, 0x01,0x8b, 0x01,0x74, 0x31,0xfb, 0x01,0x73, 0x01,0x8b, 0x30,0xfd, 0x01,0x8b, 
+0x01,0x73, 0x32,0xfb, 0x01,0x74, 0x01,0x8b, 0x81,0x3e,0xfd, 0x01,0x88, 0x34,0xfb, 0x01,0x7c, 
+0x01,0x8b, 0x2a,0xfd, 0x01,0x8b, 0x01,0x7c, 0x35,0xfb, 0x01,0x88, 0x81,0x40,0xfd, 0x01,0x81, 
+0x35,0xfb, 0x01,0x7d, 0x01,0x8b, 0x26,0xfd, 0x01,0x8b, 0x01,0x7d, 0x36,0xfb, 0x01,0x81, 0x81,0x42,0xfd, 
+0x01,0x7b, 0x38,0xfb, 0x01,0x87, 0x20,0xfd, 0x01,0x87, 0x39,0xfb, 0x01,0x7b, 0x81,0x43,0xfd, 
+0x01,0x8b, 0x01,0x75, 0x3a,0xfb, 0x01,0x77, 0x01,0x80, 0x02,0x8b, 0x14,0xfd, 0x02,0x8b, 0x01,0x80, 
+0x01,0x77, 0x3b,0xfb, 0x01,0x75, 0x01,0x8b, 0x81,0x44,0xfd, 0x01,0x8b, 0x01,0x70, 0x3e,0xfb, 
+0x01,0x71, 0x01,0x7d, 0x01,0x84, 0x0c,0x8b, 0x01,0x84, 0x01,0x7d, 0x01,0x71, 0x3f,0xfb, 0x01,0x70, 
+0x01,0x8b, 0x81,0x46,0xfd, 0x01,0x86, 0x80,0x8f,0xfb, 0x01,0x86, 0x81,0x48,0xfd, 
+0x01,0x82, 0x80,0x8d,0xfb, 0x01,0x82, 0x81,0x4a,0xfd, 0x01,0x7f, 0x80,0x8b,0xfb, 
+0x01,0x7f, 0x81,0x4c,0xfd, 0x01,0x7d, 0x80,0x89,0xfb, 0x01,0x7d, 0x81,0x4e,0xfd, 
+0x01,0x7c, 0x80,0x87,0xfb, 0x01,0x7c, 0x81,0x4f,0xfd, 0x01,0x8b, 0x01,0x7b, 0x80,0x85,0xfb, 
+0x01,0x7b, 0x01,0x8b, 0x81,0x50,0xfd, 0x01,0x8b, 0x01,0x7b, 0x80,0x83,0xfb, 0x01,0x7b, 
+0x01,0x8b, 0x81,0x52,0xfd, 0x01,0x8b, 0x01,0x7c, 0x80,0x81,0xfb, 0x01,0x7c, 0x01,0x8b, 
+0x81,0x55,0xfd, 0x01,0x7d, 0x7f,0xfb, 0x01,0x7d, 0x81,0x58,0xfd, 0x01,0x7f, 0x7d,0xfb, 
+0x01,0x7f, 0x81,0x08,0xfd, 0x02,0x2b, 0x01,0x6c, 0x1f,0xfd, 0x01,0x07, 0x01,0x55, 0x0b,0xfd, 
+0x01,0x41, 0x01,0x55, 0x06,0xfd, 0x01,0x83, 0x0b,0x41, 0x01,0x83, 0x03,0xfd, 0x01,0x19, 0x01,0x55, 
+0x09,0xfd, 0x01,0x82, 0x02,0xfb, 0x01,0x22, 0x01,0x2b, 0x01,0x03, 0x01,0xfb, 0x01,0x47, 0x01,0x12, 
+0x0a,0xfb, 0x01,0x2b, 0x16,0xfb, 0x01,0x00, 0x01,0x03, 0x07,0xfb, 0x01,0x59, 0x0b,0x22, 0x01,0x59, 
+0x04,0xfb, 0x01,0x22, 0x01,0x59, 0x04,0xfb, 0x01,0x59, 0x01,0x2b, 0x05,0xfb, 0x02,0x22, 0x0a,0xfb, 
+0x02,0x47, 0x0e,0xfb, 0x01,0x03, 0x01,0x47, 0x0c,0xfb, 0x01,0x2b, 0x01,0x82, 0x3e,0xfd, 0x01,0x41, 
+0x02,0xfd, 0x01,0x2e, 0x01,0x41, 0x01,0x00, 0x06,0xfd, 0x01,0x07, 0x01,0x55, 0x18,0xfd, 0x01,0x41, 
+0x01,0x55, 0x80,0x8e,0xfd, 0x01,0x83, 0x0c,0xfd, 0x01,0x41, 0x01,0x00, 0x05,0xfd, 0x01,0x41, 
+0x01,0x19, 0x01,0x6c, 0x01,0x2b, 0x1e,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x83, 0x0b,0xfd, 0x01,0x00, 
+0x01,0x6c, 0x02,0xfd, 0x01,0x83, 0x03,0xfd, 0x01,0x6c, 0x05,0x2b, 0x01,0x00, 0x05,0x2b, 0x01,0x6c, 
+0x03,0xfd, 0x01,0x2b, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x04,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x03,0x00, 0x01,0x22, 0x02,0xfb, 0x01,0x22, 0x01,0x2b, 0x0a,0xfb, 0x01,0x00, 0x08,0xfb, 0x01,0x2b, 
+0x05,0x00, 0x01,0x36, 0x07,0xfb, 0x01,0x47, 0x02,0x00, 0x01,0x22, 0x01,0xfb, 0x01,0x2b, 0x01,0x36, 
+0x02,0xfb, 0x01,0x47, 0x03,0x2b, 0x02,0x00, 0x01,0x2b, 0x02,0x00, 0x03,0x2b, 0x01,0x47, 0x04,0xfb, 
+0x01,0x00, 0x04,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x2b, 0x01,0x12, 0x04,0xfb, 0x02,0x2b, 0x02,0xfb, 
+0x01,0x59, 0x01,0x22, 0x01,0x47, 0x05,0xfb, 0x01,0x2b, 0x01,0x12, 0x01,0xfb, 0x01,0x03, 0x01,0x2b, 
+0x01,0x22, 0x0a,0xfb, 0x01,0x00, 0x01,0x22, 0x0b,0xfb, 0x01,0x70, 0x01,0x00, 0x15,0xfd, 0x01,0x83, 
+0x01,0x41, 0x02,0xfd, 0x01,0x6c, 0x01,0x55, 0x01,0x41, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 
+0x01,0x55, 0x08,0x41, 0x01,0x83, 0x14,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x2b, 
+0x01,0x41, 0x04,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x83, 0x08,0xfd, 0x01,0x83, 0x0f,0xfd, 0x01,0x00, 
+0x01,0x6c, 0x02,0xfd, 0x01,0x83, 0x7e,0xfd, 0x09,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 
+0x0a,0xfd, 0x01,0x41, 0x01,0x00, 0x05,0xfd, 0x01,0x6c, 0x02,0x2b, 0x01,0x6c, 0x1e,0xfd, 0x01,0x2b, 
+0x06,0x00, 0x03,0xfd, 0x01,0x55, 0x08,0x00, 0x01,0x55, 0x08,0xfd, 0x01,0x00, 0x07,0xfd, 0x01,0x2b, 
+0x04,0x00, 0x01,0x55, 0x03,0xfd, 0x01,0x41, 0x01,0x2b, 0x01,0xfd, 0x01,0x6c, 0x03,0x2b, 0x01,0x00, 
+0x02,0x2b, 0x01,0xfb, 0x01,0x22, 0x01,0x2b, 0x04,0xfb, 0x01,0x03, 0x03,0x2b, 0x06,0x00, 0x01,0x2b, 
+0x04,0xfb, 0x01,0x36, 0x01,0x22, 0x01,0x36, 0x01,0xfb, 0x02,0x00, 0x0a,0xfb, 0x01,0x47, 0x01,0x00, 
+0x01,0x59, 0x01,0x00, 0x01,0x59, 0x03,0xfb, 0x01,0x47, 0x02,0x22, 0x01,0x00, 0x01,0x2b, 0x01,0x22, 
+0x01,0x00, 0x01,0x2b, 0x02,0x22, 0x01,0x59, 0x04,0xfb, 0x01,0x59, 0x01,0x00, 0x04,0xfb, 0x01,0x59, 
+0x01,0x2b, 0x01,0x03, 0x01,0x22, 0x01,0xfb, 0x01,0x22, 0x07,0x00, 0x01,0x2b, 0x01,0x47, 0x05,0xfb, 
+0x01,0x00, 0x01,0x36, 0x01,0x00, 0x01,0x2b, 0x01,0x22, 0x01,0x00, 0x01,0x03, 0x04,0xfb, 0x01,0x36, 
+0x01,0x00, 0x03,0x2b, 0x05,0x00, 0x03,0xfb, 0x01,0x03, 0x03,0x2b, 0x06,0x00, 0x01,0x2b, 0x11,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x07, 0x01,0x55, 0x01,0x07, 0x01,0x55, 
+0x02,0xfd, 0x01,0x00, 0x07,0x2b, 0x01,0x00, 0x01,0x2e, 0x14,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x2e, 
+0x06,0xfd, 0x01,0x2b, 0x06,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x09,0xfd, 0x01,0x55, 
+0x08,0x00, 0x01,0x55, 0x80,0x84,0xfd, 0x01,0x41, 0x01,0x00, 0x05,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x55, 0x04,0xfd, 0x01,0x2e, 0x01,0x19, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x83, 
+0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x1f,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x03,0xfd, 0x01,0x07, 
+0x01,0x2b, 0x06,0xfd, 0x01,0x00, 0x01,0x6c, 0x09,0xfd, 0x09,0x00, 0x05,0xfd, 0x01,0x2b, 0x01,0x41, 
+0x05,0xfd, 0x01,0x41, 0x01,0x2b, 0x01,0xfd, 0x01,0x83, 0x02,0x41, 0x01,0x07, 0x01,0x2b, 0x01,0x2e, 
+0x01,0x22, 0x01,0x2b, 0x04,0x00, 0x02,0xfb, 0x05,0x22, 0x01,0x47, 0x01,0x00, 0x03,0xfb, 0x01,0x59, 
+0x07,0xfb, 0x01,0x00, 0x01,0x2b, 0x09,0xfb, 0x01,0x00, 0x03,0xfb, 0x02,0x2b, 0x04,0xfb, 0x01,0x2b, 
+0x01,0x00, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x22, 0x02,0xfb, 
+0x01,0x59, 0x01,0x22, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x03, 0x01,0xfb, 0x01,0x59, 0x01,0x00, 
+0x01,0x22, 0x06,0xfb, 0x01,0x2b, 0x01,0x22, 0x02,0xfb, 0x01,0x2b, 0x07,0xfb, 0x01,0x00, 0x01,0x2b, 
+0x01,0x03, 0x02,0xfb, 0x01,0x47, 0x01,0x00, 0x05,0xfb, 0x01,0x36, 0x03,0x22, 0x01,0x00, 0x01,0x2b, 
+0x01,0x47, 0x05,0xfb, 0x03,0x22, 0x01,0x2e, 0x01,0x3a, 0x01,0x6c, 0x01,0x00, 0x03,0xfd, 0x01,0x83, 
+0x11,0xfd, 0x01,0x2e, 0x01,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x83, 0x01,0x07, 0x01,0x19, 0x03,0xfd, 
+0x01,0x00, 0x01,0x41, 0x06,0xfd, 0x01,0x00, 0x01,0x83, 0x0f,0xfd, 0x01,0x2b, 0x09,0x00, 0x01,0x2b, 
+0x04,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x03,0xfd, 0x01,0x07, 0x01,0x2b, 0x05,0xfd, 0x01,0x2b, 
+0x01,0x00, 0x01,0x55, 0x04,0xfd, 0x01,0x2e, 0x01,0x19, 0x05,0xfd, 0x01,0x00, 0x01,0x6c, 0x80,0x89,0xfd, 
+0x01,0x41, 0x01,0x00, 0x06,0xfd, 0x01,0x19, 0x01,0x2b, 0x04,0xfd, 0x01,0x00, 0x01,0x19, 0x03,0xfd, 
+0x01,0x41, 0x01,0x00, 0x01,0x83, 0x01,0x2e, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x1f,0xfd, 
+0x01,0x55, 0x01,0x00, 0x02,0x55, 0x03,0xfd, 0x01,0x00, 0x01,0x55, 0x05,0xfd, 0x02,0x2b, 0x01,0x07, 
+0x01,0x2b, 0x01,0x83, 0x02,0xfd, 0x01,0x83, 0x04,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x02,0xfd, 0x01,0x6c, 0x02,0x2b, 0x01,0x00, 0x02,0x2b, 0x01,0x41, 0x04,0x00, 0x01,0x2b, 
+0x02,0xfd, 0x06,0x00, 0x01,0xfb, 0x01,0x22, 0x01,0x2b, 0x01,0xfb, 0x01,0x00, 0x05,0xfb, 0x01,0x03, 
+0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x09,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x03, 0x08,0xfb, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x00, 0x02,0xfb, 0x01,0x47, 0x01,0x00, 0x01,0x47, 0x01,0x22, 0x03,0xfb, 0x01,0x2b, 
+0x01,0x22, 0x01,0xfb, 0x01,0x2b, 0x01,0x22, 0x01,0xfb, 0x01,0x2b, 0x01,0x22, 0x01,0xfb, 0x01,0x2b, 
+0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x22, 0x01,0x2b, 
+0x01,0x00, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x06,0xfb, 0x04,0x2b, 0x01,0x00, 0x07,0xfb, 0x02,0x00, 
+0x04,0xfb, 0x01,0x00, 0x01,0x36, 0x04,0xfb, 0x01,0x47, 0x03,0xfb, 0x01,0x00, 0x03,0x22, 0x01,0x03, 
+0x05,0xfb, 0x01,0x81, 0x01,0x15, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x15,0xfd, 0x01,0x2b, 0x01,0x07, 
+0x03,0xfd, 0x01,0x00, 0x01,0x6c, 0x05,0xfd, 0x01,0x00, 0x01,0x41, 0x05,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x15,0xfd, 0x01,0x00, 0x08,0xfd, 0x01,0x55, 0x01,0x00, 0x02,0x55, 0x03,0xfd, 0x01,0x00, 0x01,0x55, 
+0x06,0xfd, 0x01,0x19, 0x01,0x2b, 0x04,0xfd, 0x01,0x00, 0x01,0x19, 0x04,0xfd, 0x02,0x2b, 0x01,0x07, 
+0x01,0x2b, 0x01,0x83, 0x02,0xfd, 0x01,0x83, 0x80,0x84,0xfd, 0x01,0x41, 0x01,0x00, 0x0b,0xfd, 
+0x01,0x2e, 0x01,0x00, 0x04,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x2b, 0x01,0x2e, 0x09,0xfd, 0x01,0x2b, 
+0x05,0x00, 0x05,0xfd, 0x01,0x19, 0x09,0x2b, 0x01,0x19, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0x55, 
+0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x05,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x2e, 
+0x01,0x19, 0x01,0x00, 0x01,0x2e, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x09,0x00, 0x02,0xfd, 
+0x01,0x83, 0x02,0x41, 0x01,0x2b, 0x01,0x07, 0x01,0x41, 0x01,0x6c, 0x01,0x00, 0x06,0xfd, 0x01,0x00, 
+0x02,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x88, 0x02,0x2b, 0x01,0xfb, 0x01,0x00, 0x04,0xfb, 
+0x01,0x22, 0x01,0x00, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x08,0xfb, 0x01,0x59, 0x05,0x00, 0x01,0x03, 
+0x04,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0xfb, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x22, 0x01,0x59, 
+0x01,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x2b, 0x09,0x00, 0x01,0x22, 0x04,0xfb, 0x01,0x00, 0x01,0x47, 
+0x02,0xfb, 0x01,0x00, 0x02,0xfb, 0x01,0x00, 0x01,0x03, 0x04,0xfb, 0x01,0x2b, 0x02,0x00, 0x01,0x22, 
+0x03,0x00, 0x01,0x03, 0x05,0xfb, 0x01,0x00, 0x01,0x12, 0x04,0xfb, 0x01,0x00, 0x01,0x22, 0x04,0xfb, 
+0x06,0x00, 0x02,0x2b, 0x01,0x22, 0x03,0xfb, 0x01,0x74, 0x01,0x88, 0x01,0x41, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x41, 0x01,0x00, 0x15,0xfd, 0x01,0x00, 0x01,0x55, 0x03,0xfd, 0x01,0x2b, 0x01,0x07, 0x05,0xfd, 
+0x01,0x2b, 0x01,0x55, 0x05,0xfd, 0x01,0x19, 0x01,0x00, 0x03,0xfd, 0x01,0x19, 0x09,0x2b, 0x01,0x19, 
+0x04,0xfd, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x83, 0x01,0x00, 0x04,0xfd, 
+0x01,0x41, 0x01,0x00, 0x02,0x55, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x0c,0xfd, 
+0x01,0x2e, 0x01,0x00, 0x04,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x2e, 0x01,0x19, 0x01,0x00, 0x01,0x2e, 
+0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x80,0x83,0xfd, 0x01,0x41, 0x01,0x00, 0x0a,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x55, 0x04,0xfd, 0x01,0x41, 0x01,0x00, 0x10,0xfd, 0x01,0x41, 0x01,0x00, 0x05,0xfd, 
+0x01,0x19, 0x09,0x2b, 0x01,0x19, 0x03,0xfd, 0x01,0x6c, 0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 
+0x04,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x83, 0x01,0x07, 0x01,0x00, 0x01,0x2b, 
+0x01,0x55, 0x05,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 
+0x01,0x2e, 0x01,0x2b, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 
+0x01,0x41, 0x01,0x07, 0x01,0x2b, 0x01,0x41, 0x01,0x00, 0x01,0xfd, 0x01,0x2b, 0x01,0x2f, 0x01,0xfb, 
+0x01,0x00, 0x04,0xfb, 0x01,0x2b, 0x01,0x22, 0x01,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x36, 0x06,0xfb, 
+0x01,0x36, 0x02,0x00, 0x01,0x03, 0x01,0x59, 0x01,0xfb, 0x01,0x47, 0x02,0x00, 0x03,0xfb, 0x02,0x2b, 
+0x01,0xfb, 0x01,0x00, 0x01,0xfb, 0x02,0x2b, 0x02,0xfb, 0x01,0x03, 0x01,0x2b, 0x05,0xfb, 0x01,0x47, 
+0x01,0x00, 0x01,0x59, 0x08,0xfb, 0x01,0x59, 0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x02,0xfb, 0x01,0x47, 
+0x01,0x00, 0x03,0xfb, 0x01,0x00, 0x02,0x2b, 0x01,0x22, 0x01,0x59, 0x01,0x00, 0x01,0xfb, 0x01,0x59, 
+0x01,0x00, 0x01,0x36, 0x04,0xfb, 0x01,0x00, 0x01,0x59, 0x04,0xfb, 0x01,0x00, 0x01,0x22, 0x08,0xfb, 
+0x01,0x2b, 0x01,0x22, 0x05,0xfb, 0x01,0xfc, 0x01,0x8b, 0x01,0xfd, 0x01,0x2b, 0x01,0x41, 0x01,0xfd, 
+0x01,0x83, 0x01,0x00, 0x01,0x55, 0x13,0xfd, 0x01,0x6c, 0x01,0x00, 0x04,0xfd, 0x01,0x55, 0x01,0x00, 
+0x0c,0xfd, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x19, 0x09,0x2b, 0x01,0x19, 0x03,0xfd, 0x01,0x55, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x04,0xfd, 0x01,0x6c, 0x03,0xfd, 
+0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x0b,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x03,0xfd, 0x01,0x41, 
+0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x83, 0x01,0x07, 0x01,0x00, 0x01,0x2b, 0x01,0x55, 0x80,0x85,0xfd, 
+0x01,0x41, 0x01,0x00, 0x09,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x19, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 
+0x10,0xfd, 0x01,0x2e, 0x01,0x2b, 0x18,0xfd, 0x01,0x00, 0x01,0x2b, 0x05,0xfd, 0x01,0x55, 0x01,0x41, 
+0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x01,0x00, 0x05,0xfd, 0x01,0x6c, 0x01,0x41, 0x01,0x00, 
+0x03,0x41, 0x01,0x00, 0x03,0x41, 0x01,0x00, 0x01,0x41, 0x01,0x83, 0x01,0xfd, 0x01,0x2b, 0x01,0x41, 
+0x01,0x2b, 0x02,0x00, 0x01,0x19, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 
+0x04,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 0x01,0x69, 0x01,0x85, 0x01,0x00, 0x04,0xfb, 0x01,0x22, 
+0x01,0x00, 0x01,0x22, 0x02,0x00, 0x01,0x22, 0x05,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x22, 0x06,0xfb, 
+0x01,0x00, 0x01,0x36, 0x02,0xfb, 0x01,0x00, 0x01,0x47, 0x01,0xfb, 0x01,0x00, 0x01,0x03, 0x01,0x00, 
+0x03,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0xfb, 0x01,0x03, 0x0b,0x00, 0x01,0x36, 0x02,0xfb, 0x02,0x2b, 
+0x03,0xfb, 0x01,0x00, 0x03,0xfb, 0x01,0x2b, 0x01,0x59, 0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0xfb, 
+0x01,0x2b, 0x01,0x22, 0x01,0x00, 0x01,0x12, 0x02,0xfb, 0x02,0x2b, 0x04,0xfb, 0x01,0x00, 0x04,0xfb, 
+0x01,0x59, 0x01,0x00, 0x06,0xfb, 0x01,0x36, 0x02,0x2b, 0x01,0x00, 0x01,0x03, 0x03,0xfb, 0x01,0x72, 
+0x01,0x85, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x13,0xfd, 
+0x02,0x2b, 0x05,0xfd, 0x01,0x00, 0x01,0x41, 0x0a,0xfd, 0x01,0x07, 0x01,0x00, 0x12,0xfd, 0x01,0x2b, 
+0x01,0x07, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x2e, 0x01,0x2b, 0x09,0xfd, 0x01,0x00, 0x01,0x2b, 
+0x0b,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x19, 0x04,0xfd, 0x01,0x55, 0x01,0x41, 0x01,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x07, 0x01,0x00, 0x80,0x87,0xfd, 0x01,0x41, 0x01,0x00, 0x07,0xfd, 0x01,0x6c, 
+0x01,0x2b, 0x01,0x00, 0x01,0x55, 0x06,0xfd, 0x01,0x41, 0x01,0x00, 0x10,0xfd, 0x01,0x2b, 0x01,0x07, 
+0x17,0xfd, 0x02,0x2b, 0x08,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x05,0xfd, 
+0x01,0x41, 0x01,0x2b, 0x01,0x00, 0x07,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x6c, 0x01,0xfd, 0x03,0x2b, 
+0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x03,0x2b, 0x01,0x00, 
+0x01,0x2b, 0x01,0x19, 0x01,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x01,0xfc, 0x04,0xfb, 0x01,0x22, 
+0x01,0x2b, 0x01,0x22, 0x01,0x00, 0x01,0x59, 0x06,0xfb, 0x01,0x47, 0x01,0xfb, 0x03,0x00, 0x01,0x36, 
+0x02,0xfb, 0x01,0x00, 0x01,0x36, 0x01,0xfb, 0x01,0x22, 0x01,0x00, 0x02,0xfb, 0x02,0x00, 0x03,0xfb, 
+0x01,0x00, 0x01,0xfb, 0x01,0x00, 0x01,0x12, 0x02,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x12, 0x02,0xfb, 
+0x01,0x36, 0x01,0x00, 0x06,0xfb, 0x01,0x00, 0x01,0x47, 0x02,0xfb, 0x01,0x22, 0x01,0x00, 0x06,0xfb, 
+0x01,0x2b, 0x01,0x22, 0x01,0xfb, 0x01,0x2b, 0x02,0x00, 0x03,0xfb, 0x01,0x00, 0x01,0x03, 0x09,0xfb, 
+0x01,0x2b, 0x01,0x00, 0x05,0xfb, 0x02,0x00, 0x01,0x12, 0x01,0x22, 0x03,0x00, 0x01,0x22, 0x01,0xfc, 
+0x01,0x8b, 0x05,0xfd, 0x01,0x41, 0x01,0x2b, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x05,0xfd, 0x01,0x2b, 
+0x02,0x00, 0x01,0x83, 0x09,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x83, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 
+0x01,0x83, 0x08,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x6c, 0x11,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x83, 
+0x02,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x55, 0x07,0xfd, 0x02,0x2b, 0x0a,0xfd, 0x01,0x6c, 
+0x01,0x2b, 0x01,0x00, 0x01,0x55, 0x07,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 
+0x80,0x80,0xfd, 0x09,0x00, 0x03,0xfd, 0x01,0x83, 0x01,0x41, 0x01,0x19, 0x02,0x00, 0x01,0x2b, 
+0x01,0x83, 0x07,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x55, 0x03,0xfd, 0x01,0x6c, 0x01,0x41, 0x01,0x2e, 
+0x09,0xfd, 0x01,0x00, 0x01,0x41, 0x15,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x09,0xfd, 0x01,0x41, 
+0x01,0x00, 0x02,0xfd, 0x01,0x55, 0x07,0xfd, 0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 
+0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x03,0x00, 0x01,0x2b, 0x02,0xfd, 0x02,0x41, 
+0x01,0x07, 0x01,0x2b, 0x01,0x41, 0x01,0x2e, 0x01,0x19, 0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 
+0x01,0xfd, 0x01,0x88, 0x01,0x75, 0x04,0xfb, 0x01,0x00, 0x01,0x2b, 0x08,0xfb, 0x01,0x22, 0x01,0x2b, 
+0x01,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0xfb, 0x01,0x59, 0x01,0x36, 
+0x01,0x47, 0x02,0x00, 0x04,0xfb, 0x01,0x00, 0x01,0xfb, 0x01,0x22, 0x01,0x36, 0x02,0xfb, 0x01,0x36, 
+0x01,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x59, 0x05,0xfb, 0x01,0x03, 0x01,0x00, 0x02,0x59, 
+0x01,0xfb, 0x02,0x2b, 0x06,0xfb, 0x02,0x2b, 0x01,0x59, 0x02,0x00, 0x03,0xfb, 0x01,0x2b, 0x01,0x00, 
+0x09,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x59, 0x05,0xfb, 0x01,0x00, 0x03,0xfb, 0x01,0x2b, 0x01,0x22, 
+0x01,0x3c, 0x02,0x00, 0x01,0x83, 0x07,0xfd, 0x02,0x2b, 0x05,0xfd, 0x01,0x55, 0x01,0x2b, 0x01,0xfd, 
+0x01,0x19, 0x01,0x07, 0x08,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2e, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x83, 0x05,0xfd, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 0x01,0x55, 0x11,0xfd, 0x01,0x83, 0x01,0x00, 
+0x01,0x2e, 0x03,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x04,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x83, 0x01,0x41, 0x01,0x19, 0x02,0x00, 0x01,0x2b, 0x01,0x83, 
+0x08,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x55, 0x80,0x87,0xfd, 0x01,0x55, 0x01,0x2b, 
+0x04,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x2e, 0x0b,0xfd, 0x01,0x2e, 0x05,0x00, 0x01,0x2b, 0x01,0x19, 
+0x04,0xfd, 0x08,0x00, 0x01,0x2b, 0x11,0xfd, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 0x01,0x2e, 0x0b,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x03,0x2b, 0x02,0x00, 0x04,0xfd, 0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x02,0xfd, 
+0x01,0x41, 0x01,0x2b, 0x01,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x07, 0x06,0x41, 0x01,0x2e, 0x01,0x6c, 
+0x01,0x2b, 0x04,0x00, 0x01,0x07, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x19, 0x01,0x2b, 0x02,0xfd, 
+0x01,0x8b, 0x01,0x81, 0x01,0x70, 0x01,0x12, 0x01,0x00, 0x01,0x2b, 0x0a,0xfb, 0x02,0x00, 0x01,0x2b, 
+0x03,0x00, 0x01,0x59, 0x02,0xfb, 0x01,0x47, 0x01,0x2b, 0x01,0x00, 0x01,0x22, 0x01,0x00, 0x03,0xfb, 
+0x01,0x22, 0x01,0x00, 0x05,0xfb, 0x01,0x59, 0x01,0x22, 0x01,0x2b, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 
+0x01,0x22, 0x02,0xfb, 0x01,0x59, 0x01,0x00, 0x01,0x47, 0x01,0x36, 0x03,0x00, 0x01,0x47, 0x06,0xfb, 
+0x01,0x59, 0x02,0x00, 0x01,0x03, 0x01,0xfb, 0x01,0x12, 0x02,0x00, 0x01,0x2b, 0x01,0x59, 0x06,0xfb, 
+0x01,0x22, 0x01,0x2b, 0x02,0x00, 0x01,0x59, 0x06,0xfb, 0x01,0x2b, 0x01,0x00, 0x02,0x2b, 0x01,0x00, 
+0x01,0x6c, 0x01,0x8b, 0x01,0xfd, 0x01,0x2b, 0x01,0x83, 0x05,0xfd, 0x01,0x2e, 0x01,0x00, 0x01,0x2b, 
+0x06,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x83, 0x01,0x2b, 0x01,0x19, 0x08,0xfd, 0x01,0x83, 0x01,0x07, 
+0x08,0xfd, 0x01,0x83, 0x01,0x2b, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 0x01,0x83, 0x13,0xfd, 
+0x01,0x41, 0x04,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x2e, 0x03,0xfd, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 
+0x01,0x2e, 0x09,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x2e, 0x0c,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0x2b, 
+0x02,0x00, 0x80,0xbe,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x83, 0x0d,0xfd, 0x01,0x83, 0x03,0x41, 
+0x01,0x6c, 0x05,0xfd, 0x01,0x2b, 0x04,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x41, 
+0x01,0x55, 0x02,0xfd, 0x01,0x83, 0x01,0x41, 0x06,0x2b, 0x01,0x41, 0x01,0x83, 0x01,0x41, 0x04,0xfd, 
+0x01,0x2b, 0x01,0x2e, 0x01,0x41, 0x02,0x00, 0x01,0x6c, 0x04,0xfd, 0x01,0x8b, 0x01,0x01, 0x01,0x22, 
+0x0c,0xfb, 0x01,0x36, 0x01,0x22, 0x01,0x36, 0x05,0xfb, 0x01,0x59, 0x01,0x2b, 0x01,0x59, 0x01,0xfb, 
+0x01,0x2b, 0x04,0x00, 0x01,0x36, 0x03,0xfb, 0x01,0x22, 0x02,0x00, 0x01,0x2b, 0x01,0x12, 0x04,0xfb, 
+0x01,0x22, 0x02,0x00, 0x02,0xfb, 0x01,0x36, 0x03,0xfb, 0x01,0x22, 0x01,0x47, 0x0c,0xfb, 0x01,0x59, 
+0x01,0x22, 0x09,0xfb, 0x01,0x47, 0x01,0x2b, 0x01,0x47, 0x09,0xfb, 0x01,0x59, 0x01,0x22, 0x01,0x30, 
+0x01,0x8b, 0x0a,0xfd, 0x01,0x07, 0x01,0x41, 0x08,0xfd, 0x01,0x2e, 0x01,0x00, 0x01,0x2b, 0x1b,0xfd, 
+0x01,0x83, 0x1a,0xfd, 0x01,0x2b, 0x08,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x83, 0x1a,0xfd, 0x01,0x83, 
+0x03,0x41, 0x01,0x6c, 0x81,0x03,0xfd, 0x01,0x8b, 0x01,0x7c, 0x57,0xfb, 0x01,0x7c, 0x01,0x8b, 
+0x81,0x7f,0xfd, 0x01,0x8b, 0x01,0x7b, 0x53,0xfb, 0x01,0x7b, 0x01,0x8b, 0x81,0x83,0xfd, 
+0x01,0x8b, 0x01,0xfc, 0x01,0x6d, 0x4d,0xfb, 0x01,0x6d, 0x01,0xfc, 0x01,0x8b, 0x81,0x87,0xfd, 
+0x01,0x8b, 0x01,0x80, 0x01,0x72, 0x49,0xfb, 0x01,0x72, 0x01,0x80, 0x01,0x8b, 0x80,0xfd,0xfd, 
+0x01,0x19, 0x01,0xfd, 0x01,0x19, 0x02,0x55, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x83, 0x05,0xfd, 
+0x01,0x83, 0x01,0x19, 0x01,0x00, 0x03,0xfd, 0x01,0x2b, 0x05,0xfd, 0x01,0x55, 0x03,0x41, 0x01,0x55, 
+0x01,0xfd, 0x04,0x41, 0x01,0x55, 0x03,0xfd, 0x01,0x2b, 0x02,0xfd, 0x06,0x41, 0x01,0x55, 0x04,0xfd, 
+0x01,0x41, 0x01,0x83, 0x0a,0xfd, 0x01,0x41, 0x01,0x19, 0x04,0xfd, 0x01,0x2b, 0x06,0xfd, 0x01,0x6c, 
+0x05,0xfd, 0x01,0x6c, 0x01,0x55, 0x14,0xfd, 0x01,0x19, 0x01,0x55, 0x22,0xfd, 0x01,0x86, 0x01,0x79, 
+0x1b,0xfb, 0x01,0x22, 0x0e,0xfb, 0x01,0x22, 0x02,0xfb, 0x01,0x12, 0x01,0x22, 0x01,0x00, 0x06,0xfb, 
+0x01,0x2b, 0x01,0x36, 0x0d,0xfb, 0x01,0x79, 0x01,0x86, 0x09,0xfd, 0x01,0x41, 0x01,0x55, 0x08,0xfd, 
+0x01,0x2b, 0x02,0xfd, 0x06,0x41, 0x01,0x55, 0x04,0xfd, 0x01,0x41, 0x01,0x83, 0x1c,0xfd, 0x01,0x83, 
+0x01,0x55, 0x08,0xfd, 0x01,0x19, 0x04,0xfd, 0x01,0x6c, 0x01,0x2b, 0x08,0xfd, 0x01,0x07, 0x80,0xa7,0xfd, 
+0x01,0x19, 0x02,0x2b, 0x01,0x41, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x83, 
+0x02,0x00, 0x01,0x2b, 0x01,0x83, 0x03,0xfd, 0x01,0x00, 0x05,0xfd, 0x01,0x00, 0x03,0x2b, 0x01,0x00, 
+0x01,0xfd, 0x01,0x00, 0x03,0x2b, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0x2b, 
+0x01,0x00, 0x02,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x41, 0x0a,0xfd, 0x01,0x2b, 0x02,0x6c, 
+0x03,0x2b, 0x01,0x00, 0x03,0x2b, 0x03,0xfd, 0x01,0x2b, 0x01,0x19, 0x04,0xfd, 0x01,0x19, 0x01,0x2b, 
+0x06,0xfd, 0x01,0x2b, 0x05,0x00, 0x01,0x55, 0x07,0xfd, 0x01,0x00, 0x01,0x41, 0x17,0xfd, 0x01,0x00, 
+0x04,0xfd, 0x01,0x41, 0x01,0x00, 0x06,0xfd, 0x01,0x8b, 0x01,0x00, 0x01,0x75, 0x18,0xfb, 0x01,0x00, 
+0x0e,0xfb, 0x01,0x00, 0x02,0xfb, 0x01,0x36, 0x01,0x00, 0x01,0x2b, 0x01,0x22, 0x04,0xfb, 0x01,0x59, 
+0x01,0x00, 0x01,0x59, 0x08,0xfb, 0x01,0x59, 0x01,0xfb, 0x01,0x75, 0x01,0x81, 0x01,0x8b, 0x0b,0xfd, 
+0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x83, 0x05,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0x2b, 
+0x01,0x00, 0x02,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x41, 0x13,0xfd, 0x01,0x6c, 0x07,0xfd, 
+0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x83, 0x01,0x00, 0x03,0xfd, 0x01,0x55, 0x01,0x00, 
+0x01,0x2b, 0x01,0x07, 0x07,0xfd, 0x01,0x00, 0x01,0x2e, 0x06,0xfd, 0x01,0x83, 0x01,0x55, 0x80,0x9d,0xfd, 
+0x01,0x83, 0x01,0x41, 0x04,0x2b, 0x01,0x55, 0x01,0x2e, 0x01,0x00, 0x03,0x41, 0x01,0x6c, 0x02,0xfd, 
+0x01,0x41, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x00, 0x03,0xfd, 
+0x05,0x00, 0x01,0xfd, 0x05,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0x6c, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x83, 0x08,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x01,0x41, 0x01,0x2b, 0x03,0x41, 0x01,0x00, 0x03,0x41, 0x03,0xfd, 
+0x01,0x00, 0x01,0x55, 0x04,0xfd, 0x01,0x41, 0x01,0x00, 0x06,0xfd, 0x01,0x55, 0x01,0x41, 0x01,0x55, 
+0x01,0xfd, 0x02,0x2b, 0x08,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x2e, 0x13,0xfd, 0x01,0x00, 0x04,0xfd, 
+0x01,0x41, 0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x8b, 0x01,0x80, 0x01,0x75, 0x15,0xfb, 
+0x01,0x00, 0x0e,0xfb, 0x01,0x00, 0x03,0xfb, 0x01,0x12, 0x06,0xfb, 0x01,0x2b, 0x06,0x00, 0x03,0xfb, 
+0x01,0x75, 0x01,0x00, 0x01,0x2b, 0x01,0x7f, 0x09,0xfd, 0x01,0x55, 0x08,0x00, 0x01,0x55, 0x02,0xfd, 
+0x01,0x6c, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0x6c, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 
+0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x01,0x83, 0x09,0xfd, 0x01,0x19, 0x01,0x2b, 0x08,0x00, 0x01,0x19, 
+0x06,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x08,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0x19, 
+0x02,0xfd, 0x01,0x2b, 0x01,0x41, 0x01,0x6c, 0x07,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0x2b, 
+0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x05,0xfd, 0x01,0x41, 0x01,0x55, 0x80,0x96,0xfd, 
+0x01,0x6c, 0x02,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0x19, 0x03,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x41, 
+0x01,0x6c, 0x02,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x00, 0x01,0xfd, 
+0x01,0x2b, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0xfd, 0x01,0x41, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x41, 0x01,0x00, 0x02,0x41, 
+0x01,0x00, 0x02,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x0a,0xfd, 0x01,0x19, 0x01,0x2b, 0x01,0x00, 
+0x01,0x83, 0x01,0x19, 0x02,0x2b, 0x01,0x00, 0x02,0x2b, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0xfd, 
+0x01,0x6c, 0x03,0x41, 0x01,0x07, 0x01,0x00, 0x02,0x2b, 0x07,0xfd, 0x02,0x2b, 0x06,0xfd, 0x01,0x41, 
+0x02,0x2b, 0x03,0x00, 0x01,0x41, 0x01,0xfd, 0x02,0x2b, 0x12,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x41, 
+0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x55, 0x01,0x41, 0x01,0xf7, 0x01,0x2b, 0x01,0x00, 
+0x01,0x09, 0x01,0x6f, 0x03,0xfb, 0x01,0x59, 0x01,0xfb, 0x01,0x2b, 0x01,0x59, 0x02,0xfb, 0x01,0x36, 
+0x01,0x47, 0x06,0xfb, 0x01,0x00, 0x09,0xfb, 0x01,0x2b, 0x09,0x00, 0x01,0x2b, 0x04,0xfb, 0x01,0x22, 
+0x01,0x00, 0x01,0x59, 0x03,0xfb, 0x01,0x2b, 0x01,0x00, 0x01,0x7a, 0x01,0x84, 0x01,0x8b, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0x55, 0x04,0xfd, 0x01,0x2e, 0x01,0x19, 0x05,0xfd, 0x01,0x00, 0x01,0x6c, 
+0x07,0xfd, 0x01,0x41, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x41, 0x01,0x00, 0x02,0x41, 0x01,0x00, 
+0x02,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x0a,0xfd, 0x01,0x2e, 0x02,0x41, 0x01,0x83, 0x02,0xfd, 
+0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x07,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x19, 0x07,0xfd, 0x01,0x2b, 
+0x03,0x00, 0x02,0x2b, 0x08,0xfd, 0x06,0x00, 0x01,0x2b, 0x01,0x2e, 0x01,0x83, 0x03,0xfd, 0x01,0x41, 
+0x01,0x00, 0x05,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x83, 0x80,0x96,0xfd, 0x01,0x83, 0x01,0x00, 
+0x02,0x2b, 0x01,0x00, 0x01,0x55, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x2b, 0x01,0x41, 0x01,0xfd, 
+0x01,0x83, 0x01,0x41, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x01,0x55, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 
+0x01,0xfd, 0x01,0x41, 0x01,0x2b, 0x02,0xfd, 0x04,0x00, 0x01,0x2b, 0x01,0xfd, 0x05,0x00, 0x03,0xfd, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0x2b, 0x01,0x00, 0x02,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 
+0x0b,0xfd, 0x01,0x00, 0x01,0x07, 0x01,0x2e, 0x01,0x55, 0x05,0x41, 0x01,0x55, 0x03,0xfd, 0x01,0x00, 
+0x01,0xfd, 0x01,0x6c, 0x04,0x2b, 0x01,0x00, 0x01,0x41, 0x06,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 
+0x07,0xfd, 0x01,0x07, 0x01,0x19, 0x02,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 
+0x01,0x00, 0x01,0x41, 0x11,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x02,0x2b, 
+0x04,0x00, 0x01,0x2b, 0x01,0x07, 0x01,0x41, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x8b, 0x01,0x82, 
+0x01,0x08, 0x01,0x00, 0x01,0xfb, 0x02,0x2b, 0x02,0xfb, 0x01,0x2b, 0x01,0x03, 0x06,0xfb, 0x01,0x00, 
+0x01,0x03, 0x01,0x59, 0x0c,0xfb, 0x01,0x00, 0x08,0xfb, 0x01,0x36, 0x01,0x00, 0x02,0x36, 0x01,0x70, 
+0x01,0x79, 0x01,0x82, 0x01,0x00, 0x01,0x50, 0x06,0xfd, 0x01,0x19, 0x01,0x2b, 0x04,0xfd, 0x01,0x00, 
+0x01,0x19, 0x04,0xfd, 0x02,0x2b, 0x01,0x07, 0x01,0x2b, 0x01,0x83, 0x02,0xfd, 0x01,0x83, 0x04,0xfd, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0x2b, 0x01,0x00, 0x02,0x2b, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 
+0x0f,0xfd, 0x01,0x2b, 0x01,0x19, 0x08,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x41, 0x0a,0xfd, 0x01,0x2b, 
+0x01,0x41, 0x01,0xfd, 0x01,0x55, 0x01,0x41, 0x03,0x2b, 0x01,0x6c, 0x08,0xfd, 0x01,0x19, 0x01,0x2b, 
+0x05,0xfd, 0x01,0x6c, 0x01,0x00, 0x06,0xfd, 0x02,0x2b, 0x80,0x95,0xfd, 0x01,0x55, 0x01,0x00, 
+0x01,0x55, 0x01,0x19, 0x02,0x55, 0x01,0x00, 0x01,0x2b, 0x01,0x07, 0x01,0xfd, 0x01,0x00, 0x01,0x83, 
+0x03,0xfd, 0x02,0x00, 0x01,0x6c, 0x01,0x2b, 0x01,0x19, 0x01,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x83, 
+0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x00, 0x02,0xfd, 0x05,0x41, 0x02,0xfd, 0x01,0x00, 0x03,0xfd, 
+0x01,0x00, 0x01,0x83, 0x01,0x55, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x04,0xfd, 
+0x01,0x00, 0x0a,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x41, 0x01,0x00, 0x01,0x2b, 0x06,0x00, 0x03,0xfd, 
+0x01,0x00, 0x05,0xfd, 0x01,0x41, 0x01,0x00, 0x06,0xfd, 0x01,0x83, 0x02,0x00, 0x01,0x2b, 0x02,0x00, 
+0x01,0x19, 0x06,0xfd, 0x01,0x2b, 0x01,0x19, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x01,0xfd, 0x01,0x41, 
+0x01,0x00, 0x11,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x41, 0x01,0x00, 0x04,0xfd, 0x01,0x2e, 0x01,0x41, 
+0x01,0x83, 0x01,0x00, 0x04,0xfd, 0x02,0x2b, 0x05,0xfd, 0x01,0x00, 0x01,0x79, 0x01,0x71, 0x01,0x00, 
+0x01,0x7a, 0x01,0x73, 0x01,0x00, 0x01,0x47, 0x06,0xfb, 0x03,0x00, 0x01,0x2b, 0x01,0x47, 0x07,0xfb, 
+0x01,0x00, 0x01,0x59, 0x01,0xfb, 0x01,0x00, 0x01,0xfb, 0x01,0x59, 0x01,0x00, 0x04,0xfb, 0x01,0x28, 
+0x01,0x00, 0x01,0x43, 0x01,0x49, 0x01,0x00, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x00, 0x0c,0xfd, 
+0x01,0x2e, 0x01,0x00, 0x04,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x2e, 0x01,0x19, 0x01,0x00, 0x01,0x2e, 
+0x01,0x2b, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 0x01,0x00, 0x01,0x83, 0x01,0x55, 0x01,0x00, 0x02,0xfd, 
+0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x0e,0xfd, 0x02,0x2b, 0x08,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x83, 0x0b,0xfd, 0x01,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x19, 0x01,0x2b, 0x03,0x41, 
+0x01,0x83, 0x09,0xfd, 0x01,0x00, 0x01,0x55, 0x05,0xfd, 0x01,0x00, 0x06,0xfd, 0x01,0x83, 0x01,0x00, 
+0x01,0x83, 0x80,0x95,0xfd, 0x02,0x83, 0x01,0x00, 0x02,0xfd, 0x01,0x55, 0x01,0x83, 0x01,0x00, 
+0x01,0x83, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x02,0x2b, 0x02,0x00, 0x01,0x83, 0x01,0xfd, 0x01,0x00, 
+0x01,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x03,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x6c, 0x01,0xfd, 0x01,0x55, 
+0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0xfd, 0x01,0x55, 0x01,0x83, 0x01,0x55, 
+0x01,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 
+0x05,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x19, 0x01,0x83, 0x01,0xfd, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 
+0x05,0xfd, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x00, 0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x55, 
+0x10,0xfd, 0x01,0x2b, 0x04,0xfd, 0x01,0x19, 0x01,0x2b, 0x07,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 
+0x02,0x2b, 0x06,0xfd, 0x01,0x2b, 0x01,0x19, 0x01,0xfd, 0x01,0x41, 0x01,0x83, 0x01,0x41, 0x01,0x00, 
+0x02,0x8b, 0x01,0x87, 0x01,0x82, 0x01,0x7d, 0x01,0x7a, 0x01,0x77, 0x01,0x00, 0x01,0x71, 0x01,0x5c, 
+0x01,0x2b, 0x01,0x00, 0x01,0x2b, 0x01,0x59, 0x03,0xfb, 0x01,0x6d, 0x01,0x38, 0x01,0x00, 0x01,0x71, 
+0x01,0x74, 0x01,0x00, 0x01,0x7a, 0x01,0x7d, 0x01,0x00, 0x01,0x35, 0x02,0x8b, 0x02,0xfd, 0x01,0x6c, 
+0x03,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x55, 0x0b,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x55, 0x03,0xfd, 
+0x01,0x41, 0x01,0x00, 0x01,0x2e, 0x01,0xfd, 0x01,0x83, 0x01,0x07, 0x01,0x00, 0x01,0x2b, 0x01,0x55, 
+0x04,0xfd, 0x01,0x55, 0x02,0x00, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 
+0x04,0xfd, 0x01,0x00, 0x06,0xfd, 0x01,0x2b, 0x01,0x6c, 0x06,0xfd, 0x01,0x00, 0x01,0x6c, 0x08,0xfd, 
+0x01,0x83, 0x01,0x00, 0x01,0x19, 0x0a,0xfd, 0x01,0x6c, 0x01,0x00, 0x0c,0xfd, 0x01,0x6c, 0x01,0x2b, 
+0x03,0x00, 0x01,0x2b, 0x01,0x00, 0x05,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x83, 0x04,0xfd, 0x01,0x2b, 
+0x01,0x07, 0x80,0x94,0xfd, 0x01,0x55, 0x06,0x00, 0x01,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0xfd, 
+0x01,0x83, 0x01,0x00, 0x01,0x2e, 0x01,0x2b, 0x01,0x6c, 0x01,0xfd, 0x01,0x41, 0x02,0x00, 0x01,0x41, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x03,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 
+0x01,0xfd, 0x01,0x07, 0x01,0x2b, 0x01,0x00, 0x02,0xfd, 0x07,0x00, 0x04,0xfd, 0x01,0x00, 0x05,0xfd, 
+0x01,0x83, 0x01,0x00, 0x03,0xfd, 0x01,0x07, 0x01,0x41, 0x01,0x2b, 0x01,0x07, 0x01,0x19, 0x01,0xfd, 
+0x01,0x00, 0x01,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x19, 0x03,0xfd, 0x01,0x00, 0x01,0x19, 0x01,0x2b, 
+0x03,0xfd, 0x01,0x19, 0x01,0x2b, 0x04,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x41, 0x06,0xfd, 0x01,0x00, 
+0x01,0x55, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x2e, 
+0x01,0x6c, 0x15,0xfd, 0x01,0x2b, 0x01,0x07, 0x07,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x55, 0x01,0x2b, 
+0x0c,0xfd, 0x01,0x00, 0x01,0x41, 0x07,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 
+0x04,0xfd, 0x01,0x2b, 0x01,0x07, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x2e, 0x01,0x2b, 0x09,0xfd, 
+0x01,0x00, 0x01,0x2b, 0x0b,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x19, 0x04,0xfd, 0x01,0x55, 0x01,0x41, 
+0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x07, 0x01,0x00, 0x05,0xfd, 0x01,0x07, 0x01,0x2b, 0x01,0x00, 
+0x02,0xfd, 0x07,0x00, 0x04,0xfd, 0x01,0x00, 0x05,0xfd, 0x01,0x83, 0x01,0x00, 0x07,0xfd, 0x01,0x00, 
+0x0a,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x09,0xfd, 0x01,0x07, 0x01,0x2b, 0x02,0xfd, 0x01,0x2b, 
+0x01,0x83, 0x07,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x2e, 0x02,0xfd, 0x01,0x83, 0x01,0x2e, 0x01,0x00, 
+0x01,0x55, 0x04,0xfd, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x07, 0x01,0x19, 0x03,0xfd, 0x01,0x41, 
+0x01,0x00, 0x80,0x95,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0xfd, 0x01,0x19, 0x01,0x07, 0x02,0xfd, 
+0x01,0x2e, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 0x01,0x07, 0x01,0x2e, 0x01,0x41, 0x01,0x2b, 0x04,0xfd, 
+0x01,0x83, 0x01,0x00, 0x01,0x55, 0x03,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x03,0x41, 0x01,0x00, 
+0x02,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x19, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 
+0x01,0x19, 0x04,0xfd, 0x01,0x00, 0x01,0x83, 0x04,0xfd, 0x02,0x2b, 0x03,0xfd, 0x01,0x00, 0x01,0x41, 
+0x02,0x2b, 0x02,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x00, 0x05,0xfd, 0x02,0x00, 0x01,0x83, 0x03,0xfd, 
+0x01,0x2b, 0x01,0x19, 0x05,0xfd, 0x01,0x6c, 0x01,0xfd, 0x03,0x00, 0x01,0x55, 0x02,0xfd, 0x01,0x00, 
+0x01,0x55, 0x03,0xfd, 0x01,0x2b, 0x01,0x2e, 0x03,0xfd, 0x01,0x00, 0x05,0xfd, 0x01,0x83, 0x01,0x2e, 
+0x12,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x83, 0x07,0xfd, 0x01,0x00, 0x0f,0xfd, 0x01,0x07, 0x01,0x2b, 
+0x08,0xfd, 0x01,0x00, 0x05,0xfd, 0x01,0x83, 0x03,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x83, 0x02,0xfd, 
+0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x01,0x55, 0x07,0xfd, 0x02,0x2b, 0x0a,0xfd, 0x01,0x6c, 0x01,0x2b, 
+0x01,0x00, 0x01,0x55, 0x07,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x00, 0x07,0xfd, 
+0x01,0x00, 0x02,0xfd, 0x01,0x19, 0x02,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x19, 0x04,0xfd, 0x01,0x00, 
+0x01,0x83, 0x04,0xfd, 0x02,0x2b, 0x07,0xfd, 0x01,0x00, 0x01,0x07, 0x0b,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x83, 0x07,0xfd, 0x01,0x00, 0x01,0x55, 0x01,0xfd, 0x01,0x19, 0x01,0x2b, 0x08,0xfd, 0x01,0x00, 
+0x01,0x2e, 0x0b,0xfd, 0x01,0x07, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 0x01,0x6c, 0x03,0xfd, 0x01,0x83, 
+0x01,0x00, 0x02,0xfd, 0x01,0x2b, 0x02,0x00, 0x01,0x83, 0x80,0x8f,0xfd, 0x01,0x6c, 0x01,0x2b, 
+0x02,0x00, 0x01,0x83, 0x02,0xfd, 0x02,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x83, 0x01,0xfd, 0x01,0x41, 
+0x01,0x2b, 0x03,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x19, 0x04,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 
+0x03,0x2b, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 0x05,0xfd, 0x01,0x00, 0x07,0xfd, 
+0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 0x03,0xfd, 0x01,0x00, 
+0x01,0x41, 0x02,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x2b, 0x01,0xfd, 0x01,0x00, 0x01,0xfd, 0x01,0x07, 
+0x01,0x41, 0x02,0xfd, 0x01,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x19, 0x01,0x00, 0x07,0xfd, 0x01,0x41, 
+0x01,0x2b, 0x01,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0xfd, 0x01,0x07, 0x01,0x00, 0x03,0xfd, 0x01,0x6c, 
+0x01,0x00, 0x01,0xfd, 0x01,0x6c, 0x01,0xfd, 0x01,0x2e, 0x01,0x00, 0x05,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x01,0x19, 0x10,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x55, 0x08,0xfd, 0x01,0x00, 0x01,0x41, 0x03,0xfd, 
+0x01,0x55, 0x01,0x2e, 0x08,0xfd, 0x01,0x2b, 0x01,0x00, 0x09,0xfd, 0x01,0x00, 0x08,0xfd, 0x01,0x83, 
+0x01,0x00, 0x01,0x2e, 0x03,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x83, 0x04,0xfd, 
+0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x07,0xfd, 0x01,0x83, 0x01,0x41, 0x01,0x19, 0x02,0x00, 0x01,0x2b, 
+0x01,0x83, 0x08,0xfd, 0x01,0x41, 0x01,0x00, 0x02,0xfd, 0x01,0x55, 0x07,0xfd, 0x01,0x00, 0x05,0xfd, 
+0x01,0x00, 0x07,0xfd, 0x01,0x00, 0x01,0x07, 0x02,0xfd, 0x01,0x83, 0x01,0x2b, 0x01,0x00, 0x01,0x83, 
+0x07,0xfd, 0x01,0x55, 0x01,0x00, 0x01,0x2b, 0x01,0x6c, 0x0a,0xfd, 0x01,0x07, 0x01,0x00, 0x01,0x6c, 
+0x05,0xfd, 0x01,0x55, 0x01,0x00, 0x02,0xfd, 0x01,0x07, 0x01,0x00, 0x04,0xfd, 0x01,0x83, 0x03,0xfd, 
+0x01,0x2b, 0x01,0x07, 0x05,0xfd, 0x01,0x6c, 0x05,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 
+0x05,0xfd, 0x01,0x83, 0x01,0xfd, 0x01,0x55, 0x01,0x2b, 0x01,0xfd, 0x01,0x19, 0x01,0x07, 0x80,0x90,0xfd, 
+0x01,0x19, 0x01,0x00, 0x01,0x2b, 0x01,0x00, 0x01,0x6c, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x02,0x2b, 
+0x01,0x83, 0x02,0xfd, 0x01,0x41, 0x01,0x2b, 0x01,0xfd, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 0x01,0x41, 
+0x05,0xfd, 0x01,0x00, 0x02,0xfd, 0x01,0x00, 0x04,0x41, 0x02,0xfd, 0x01,0x00, 0x03,0xfd, 0x01,0x00, 
+0x05,0xfd, 0x01,0x00, 0x07,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x2b, 0x01,0x83, 0x03,0xfd, 0x01,0x55, 
+0x01,0x2b, 0x01,0x41, 0x01,0x2b, 0x01,0x83, 0x01,0x41, 0x01,0x00, 0x01,0x6c, 0x01,0xfd, 0x01,0x00, 
+0x01,0xfd, 0x01,0x2b, 0x01,0x41, 0x02,0xfd, 0x01,0x2b, 0x01,0x07, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 
+0x01,0x55, 0x08,0xfd, 0x01,0x00, 0x02,0x2b, 0x02,0x00, 0x01,0x2b, 0x01,0x83, 0x03,0xfd, 0x01,0x00, 
+0x01,0x19, 0x01,0xfd, 0x03,0x00, 0x01,0x2e, 0x06,0xfd, 0x01,0x83, 0x01,0x00, 0x01,0x19, 0x0d,0xfd, 
+0x01,0x2b, 0x02,0x00, 0x01,0x6c, 0x09,0xfd, 0x01,0x2e, 0x06,0x00, 0x06,0xfd, 0x01,0x2e, 0x01,0x00, 
+0x01,0x2b, 0x0a,0xfd, 0x01,0x00, 0x09,0xfd, 0x01,0x41, 0x04,0xfd, 0x01,0x00, 0x04,0xfd, 0x01,0x2e, 
+0x03,0xfd, 0x01,0x6c, 0x01,0x2b, 0x01,0x00, 0x01,0x2e, 0x09,0xfd, 0x01,0x00, 0x01,0x2b, 0x01,0x2e, 
+0x0c,0xfd, 0x01,0x2b, 0x01,0x00, 0x03,0x2b, 0x02,0x00, 0x04,0xfd, 0x01,0x00, 0x05,0xfd, 0x01,0x00, 
+0x07,0xfd, 0x01,0x83, 0x04,0x00, 0x01,0x2b, 0x01,0x83, 0x09,0xfd, 0x01,0x6c, 0x01,0x2b, 0x02,0x00, 
+0x0a,0xfd, 0x01,0x19, 0x01,0x00, 0x01,0x55, 0x04,0xfd, 0x01,0x00, 0x01,0x19, 0x02,0xfd, 0x01,0x83, 
+0x01,0x2b, 0x04,0x00, 0x01,0x2b, 0x03,0xfd, 0x01,0x6c, 0x02,0x00, 0x03,0x2b, 0x02,0x00, 0x06,0xfd, 
+0x01,0x55, 0x01,0x2b, 0x01,0x83, 0x07,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x83, 0x01,0x2b, 0x01,0x19, 
+0x80,0x8e,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 0x02,0xfd, 0x01,0x41, 0x01,0x00, 0x01,0x41, 
+0x03,0xfd, 0x02,0x2b, 0x02,0xfd, 0x01,0x41, 0x01,0x2b, 0x01,0x19, 0x01,0x00, 0x01,0x19, 0x01,0x83, 
+0x06,0xfd, 0x01,0x00, 0x07,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x19, 0x01,0xfd, 0x01,0x6c, 0x01,0x00, 
+0x01,0x2b, 0x05,0xfd, 0x01,0x00, 0x09,0xfd, 0x01,0x55, 0x01,0x41, 0x01,0x83, 0x06,0xfd, 0x01,0x6c, 
+0x01,0x41, 0x01,0x2b, 0x01,0x41, 0x01,0x00, 0x01,0x6c, 0x02,0xfd, 0x01,0x2b, 0x01,0x00, 0x01,0x2b, 
+0x07,0xfd, 0x01,0x41, 0x01,0x83, 0x0a,0xfd, 0x01,0x55, 0x01,0x41, 0x01,0x55, 0x06,0xfd, 0x01,0x55, 
+0x03,0xfd, 0x02,0x55, 0x08,0xfd, 0x01,0x55, 0x01,0x2b, 0x0d,0xfd, 0x01,0x55, 0x01,0x6c, 0x18,0xfd, 
+0x01,0x55, 0x01,0x6c, 0x0b,0xfd, 0x01,0x2b, 0x0e,0xfd, 0x01,0x2b, 0x08,0xfd, 0x01,0x83, 0x01,0x2b, 
+0x01,0x83, 0x1a,0xfd, 0x01,0x83, 0x03,0x41, 0x01,0x6c, 0x03,0xfd, 0x01,0x6c, 0x01,0x00, 0x01,0x2b, 
+0x05,0xfd, 0x01,0x00, 0x09,0xfd, 0x01,0x55, 0x01,0x41, 0x01,0x83, 0x0e,0xfd, 0x01,0x83, 0x0b,0xfd, 
+0x01,0x19, 0x01,0x83, 0x04,0xfd, 0x01,0x6c, 0x01,0x83, 0x0e,0xfd, 0x01,0x83, 0x03,0x41, 0x13,0xfd, 
+0x01,0x2e, 0x01,0x00, 0x01,0x2b, 0x80,0x95,0xfd, 0x01,0x83, 0x3c,0xfd, 0x01,0x83, 0x01,0x6c, 
+0xb6,0xd5,0xfd
+};
index a37f808735b9010561897421cc60acb320991621..885adfca79a4425a899b67929e8c39807f767083 100644 (file)
@@ -102,6 +102,7 @@ static kdp_receive_t kdp_en_recv_pkt = 0;
 
 static u_long kdp_current_ip_address = 0;
 static struct ether_addr kdp_current_mac_address = {{0, 0, 0, 0, 0, 0}};
 
 static u_long kdp_current_ip_address = 0;
 static struct ether_addr kdp_current_mac_address = {{0, 0, 0, 0, 0, 0}};
+static void *kdp_current_ifp = 0;
 
 static void kdp_handler( void *);
 
 
 static void kdp_handler( void *);
 
@@ -349,6 +350,19 @@ kdp_send(
     (*kdp_en_send_pkt)(&pkt.data[pkt.off], pkt.len);
 }
 
     (*kdp_en_send_pkt)(&pkt.data[pkt.off], pkt.len);
 }
 
+/* We don't interpret this pointer, we just give it to the
+bsd stack so it can decide when to set the MAC and IP info. */
+void
+kdp_set_interface(void *ifp)
+{
+       kdp_current_ifp = ifp;
+}
+
+void *
+kdp_get_interface()
+{
+       return kdp_current_ifp;
+}
 
 void 
 kdp_set_ip_and_mac_addresses(
 
 void 
 kdp_set_ip_and_mac_addresses(
index 6d309bbebb4f60fcb0f4e80afa5befeef8f6401d..d6093fc840fa83c4bfc4817c96ed41741141354d 100644 (file)
@@ -571,3 +571,4 @@ EXT(chudxnu_mtmsr_64):
             mtmsrd     r5
             blr
 
             mtmsrd     r5
             blr
 
+.L_end:
diff --git a/osfmk/ppc/chud/chud_spr.h.orig b/osfmk/ppc/chud/chud_spr.h.orig
new file mode 100644 (file)
index 0000000..9feff85
--- /dev/null
@@ -0,0 +1,239 @@
+/*
+ * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_LICENSE_HEADER_START@
+ * 
+ * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
+ * @APPLE_LICENSE_HEADER_END@
+ */
+
+#ifndef _CHUD_SPR_H_
+#define _CHUD_SPR_H_
+
+/* PPC SPRs - 32-bit and 64-bit implementations */
+#define chud_ppc_srr0          26
+#define chud_ppc_srr1          27
+#define chud_ppc_dsisr         18
+#define chud_ppc_dar           19
+#define chud_ppc_dec           22
+#define chud_ppc_sdr1          25
+#define chud_ppc_sprg0         272
+#define chud_ppc_sprg1         273
+#define chud_ppc_sprg2         274
+#define chud_ppc_sprg3         275
+#define chud_ppc_ear           282
+#define chud_ppc_tbl           284
+#define chud_ppc_tbu           285
+#define chud_ppc_pvr           287
+#define chud_ppc_ibat0u                528
+#define chud_ppc_ibat0l                529
+#define chud_ppc_ibat1u                530
+#define chud_ppc_ibat1l                531
+#define chud_ppc_ibat2u                532
+#define chud_ppc_ibat2l                533
+#define chud_ppc_ibat3u                534
+#define chud_ppc_ibat3l                535
+#define chud_ppc_dbat0u                536
+#define chud_ppc_dbat0l                537
+#define chud_ppc_dbat1u                538
+#define chud_ppc_dbat1l                539
+#define chud_ppc_dbat2u                540
+#define chud_ppc_dbat2l                541
+#define chud_ppc_dbat3u                542
+#define chud_ppc_dbat3l                543
+#define chud_ppc_dabr          1013
+#define chud_ppc_msr           10000   /* FAKE */
+
+/* PPC SPRs - 32-bit implementations */
+#define chud_ppc32_sr0         20000   /* FAKE */
+#define chud_ppc32_sr1         20001   /* FAKE */
+#define chud_ppc32_sr2         20002   /* FAKE */
+#define chud_ppc32_sr3         20003   /* FAKE */
+#define chud_ppc32_sr4         20004   /* FAKE */
+#define chud_ppc32_sr5         20005   /* FAKE */
+#define chud_ppc32_sr6         20006   /* FAKE */
+#define chud_ppc32_sr7         20007   /* FAKE */
+#define chud_ppc32_sr8         20008   /* FAKE */
+#define chud_ppc32_sr9         20009   /* FAKE */
+#define chud_ppc32_sr10                20010   /* FAKE */
+#define chud_ppc32_sr11                20011   /* FAKE */
+#define chud_ppc32_sr12                20012   /* FAKE */
+#define chud_ppc32_sr13                20013   /* FAKE */
+#define chud_ppc32_sr14                20014   /* FAKE */
+#define chud_ppc32_sr15                20015   /* FAKE */
+
+/* PPC SPRs - 64-bit implementations */
+#define chud_ppc64_asr         280
+
+/* PPC SPRs - 750/750CX/750CXe/750FX Specific */
+#define chud_750_upmc1         937
+#define chud_750_upmc2         938
+#define chud_750_upmc3         941
+#define chud_750_upmc4         942
+#define chud_750_mmcr0         952
+#define chud_750_pmc1          953
+#define chud_750_pmc2          954
+#define chud_750_sia           955
+#define chud_750_mmcr1         956
+#define chud_750_pmc3          957
+#define chud_750_pmc4          958
+#define chud_750_hid0          1008
+#define chud_750_hid1          1009
+#define chud_750_iabr          1010
+#define chud_750_l2cr          1017
+#define chud_750_ictc          1019
+#define chud_750_thrm1         1020
+#define chud_750_thrm2         1021
+#define chud_750_thrm3         1022
+#define chud_750fx_ibat4u      560 /* 750FX only */
+#define chud_750fx_ibat4l      561 /* 750FX only */
+#define chud_750fx_ibat5u      562 /* 750FX only */
+#define chud_750fx_ibat5l      563 /* 750FX only */
+#define chud_750fx_ibat6u      564 /* 750FX only */
+#define chud_750fx_ibat6l      565 /* 750FX only */
+#define chud_750fx_ibat7u      566 /* 750FX only */
+#define chud_750fx_ibat7l      567 /* 750FX only */
+#define chud_750fx_dbat4u      568 /* 750FX only */
+#define chud_750fx_dbat4l      569 /* 750FX only */
+#define chud_750fx_dbat5u      570 /* 750FX only */
+#define chud_750fx_dbat5l      571 /* 750FX only */
+#define chud_750fx_dbat6u      572 /* 750FX only */
+#define chud_750fx_dbat6l      573 /* 750FX only */
+#define chud_750fx_dbat7u      574 /* 750FX only */
+#define chud_750fx_dbat7l      575 /* 750FX only */
+#define chud_750fx_hid2                1016  /* 750FX only */
+
+/* PPC SPRs - 7400/7410 Specific */
+#define chud_7400_upmc1                937
+#define chud_7400_upmc2                938
+#define chud_7400_upmc3                941
+#define chud_7400_upmc4                942
+#define chud_7400_mmcr2                944
+#define chud_7400_bamr         951
+#define chud_7400_mmcr0                952
+#define chud_7400_pmc1         953
+#define chud_7400_pmc2         954
+#define chud_7400_siar         955 
+#define chud_7400_mmcr1                956
+#define chud_7400_pmc3         957
+#define chud_7400_pmc4         958
+#define chud_7400_sda          959
+#define chud_7400_hid0         1008
+#define chud_7400_hid1         1009
+#define chud_7400_iabr         1010
+#define chud_7400_msscr0       1014
+#define chud_7410_l2pmcr       1016 /* 7410 only */
+#define chud_7400_l2cr         1017
+#define chud_7400_ictc         1019
+#define chud_7400_thrm1                1020
+#define chud_7400_thrm2                1021
+#define chud_7400_thrm3                1022
+#define chud_7400_pir          1023
+
+/* PPC SPRs - 7450/7455 Specific */
+#define chud_7455_sprg4                276 /* 7455 only */
+#define chud_7455_sprg5                277 /* 7455 only */
+#define chud_7455_sprg6                278 /* 7455 only */
+#define chud_7455_sprg7                279 /* 7455 only */
+#define chud_7455_ibat4u       560 /* 7455 only */
+#define chud_7455_ibat4l       561 /* 7455 only */
+#define chud_7455_ibat5u       562 /* 7455 only */
+#define chud_7455_ibat5l       563 /* 7455 only */
+#define chud_7455_ibat6u       564 /* 7455 only */
+#define chud_7455_ibat6l       565 /* 7455 only */
+#define chud_7455_ibat7u       566 /* 7455 only */
+#define chud_7455_ibat7l       567 /* 7455 only */
+#define chud_7455_dbat4u       568 /* 7455 only */
+#define chud_7455_dbat4l       569 /* 7455 only */
+#define chud_7455_dbat5u       570 /* 7455 only */
+#define chud_7455_dbat5l       571 /* 7455 only */
+#define chud_7455_dbat6u       572 /* 7455 only */
+#define chud_7455_dbat6l       573 /* 7455 only */
+#define chud_7455_dbat7u       574 /* 7455 only */
+#define chud_7455_dbat7l       575 /* 7455 only */
+#define chud_7450_upmc5                929
+#define chud_7450_upmc6                930
+#define chud_7450_upmc1                937
+#define chud_7450_upmc2                938
+#define chud_7450_upmc3                941
+#define chud_7450_upmc4                942
+#define chud_7450_mmcr2                944
+#define chud_7450_pmc5         945
+#define chud_7450_pmc6         946
+#define chud_7450_bamr         951
+#define chud_7450_mmcr0                952
+#define chud_7450_pmc1         953
+#define chud_7450_pmc2         954
+#define chud_7450_siar         955 
+#define chud_7450_mmcr1                956
+#define chud_7450_pmc3         957
+#define chud_7450_pmc4         958
+#define chud_7450_tlbmiss      980
+#define chud_7450_ptehi                981
+#define chud_7450_ptelo                982
+#define chud_7450_l3pm         983
+#define chud_7450_hid0         1008
+#define chud_7450_hid1         1009
+#define chud_7450_iabr         1010
+#define chud_7450_ldstdb       1012
+#define chud_7450_msscr0       1014
+#define chud_7450_msssr0       1015
+#define chud_7450_ldstcr       1016
+#define chud_7450_l2cr         1017
+#define chud_7450_l3cr         1018
+#define chud_7450_ictc         1019
+#define chud_7450_ictrl                1011
+#define chud_7450_thrm1                1020
+#define chud_7450_thrm2                1021
+#define chud_7450_thrm3                1022
+#define chud_7450_pir          1023
+
+/* PPC SPRs - 970 Specific */
+#define chud_970_vrsave                256
+#define chud_970_ummcra                770
+#define chud_970_upmc1         771
+#define chud_970_upmc2         772
+#define chud_970_upmc3         773
+#define chud_970_upmc4         774
+#define chud_970_upmc5         775
+#define chud_970_upmc6         776
+#define chud_970_upmc7         777
+#define chud_970_upmc8         778
+#define chud_970_ummcr0                779
+#define chud_970_usiar         780
+#define chud_970_usdar         781
+#define chud_970_ummcr1                782
+#define chud_970_uimc          783
+#define chud_970_mmcra         786
+#define chud_970_pmc1          787
+#define chud_970_pmc2          788
+#define chud_970_pmc3          789
+#define chud_970_pmc4          790
+#define chud_970_pmc5          791
+#define chud_970_pmc6          792
+#define chud_970_pmc7          793
+#define chud_970_pmc8          794
+#define chud_970_mmcr0         795
+#define chud_970_siar          796
+#define chud_970_sdar          797
+#define chud_970_mmcr1         798
+#define chud_970_imc           799
+
+
+#endif // _CHUD_SPR_H_
diff --git a/osfmk/ppc/chud/chud_spr.h.rej b/osfmk/ppc/chud/chud_spr.h.rej
new file mode 100644 (file)
index 0000000..e4cf2a5
--- /dev/null
@@ -0,0 +1,42 @@
+***************
+*** 235,238 ****
+  #define chud_970_mmcr1               798
+  #define chud_970_imc         799
+  
+  
+--- 235,269 ----
+  #define chud_970_mmcr1               798
+  #define chud_970_imc         799
+  
++ /* PPC SPRs - 7400/7410 Specific */
++ #define chud_7400_msscr1     1015
+  
++ /* PPC SPRs - 64-bit implementations */
++ #define chud_ppc64_accr              29
++ #define chud_ppc64_ctrl              152
++ 
++ /* PPC SPRs - 970 Specific */
++ #define chud_970_scomc               276
++ #define chud_970_scomd               277
++ #define chud_970_hsprg0              304
++ #define chud_970_hsprg1              305
++ #define chud_970_hdec                310
++ #define chud_970_hior                311
++ #define chud_970_rmor                312
++ #define chud_970_hrmor               313
++ #define chud_970_hsrr0               314
++ #define chud_970_hsrr1               315
++ #define chud_970_lpcr                318
++ #define chud_970_lpidr               319
++ #define chud_970_trig0               976
++ #define chud_970_trig1               977
++ #define chud_970_trig2               978
++ #define chud_970_hid0                1008
++ #define chud_970_hid1                1009
++ #define chud_970_hid4                1012
++ #define chud_970_hid5                1014
++ #define chud_970_dabrx               1015
++ #define chud_970_trace               1022
++ #define chud_970_pir         1023
++ 
++ #endif // _CHUD_SPR_H_
index 16e3cf5e53303cdca0d480ad7a8c9f9912b04a32..9584449e8b4502d66211da87b78a94a7efab17b8 100644 (file)
@@ -132,8 +132,14 @@ struct procFeatures {
        uint64_t                pfHID5;                         /* 0x068 */
        unsigned int    l2crOriginal;           /* 0x070 */
        unsigned int    l3crOriginal;           /* 0x074 */
        uint64_t                pfHID5;                         /* 0x068 */
        unsigned int    l2crOriginal;           /* 0x070 */
        unsigned int    l3crOriginal;           /* 0x074 */
-       unsigned int    pfBootConfig;           /* 0x07C */
-       unsigned int    reserved[1];            /* 0x80 */
+       unsigned int    pfBootConfig;           /* 0x078 */
+       unsigned int    pfPowerModes;           /* 0x07C */
+#define pmDPLLVmin             0x00010000
+#define pmDPLLVminb            15
+#define pmPowerTune            0x00000004
+#define pmPowerTuneb   29
+#define pmDualPLL              0x00000001
+#define pmDualPLLb             31
 };
 #pragma pack()
 
 };
 #pragma pack()
 
index 3a5d1edb5edaa21abd1c8ffc25fd9f4ba7c971ac..d2a11f3e774880c748c72ac7589c5947c16c1ac9 100644 (file)
@@ -235,6 +235,13 @@ int main(int argc, char *argv[])
        DECLARE("pfl2crOriginal",               offsetof(struct per_proc_info *, pf.l2crOriginal));
        DECLARE("pfl3crOriginal",               offsetof(struct per_proc_info *, pf.l3crOriginal));
        DECLARE("pfBootConfig",                 offsetof(struct per_proc_info *, pf.pfBootConfig));
        DECLARE("pfl2crOriginal",               offsetof(struct per_proc_info *, pf.l2crOriginal));
        DECLARE("pfl3crOriginal",               offsetof(struct per_proc_info *, pf.l3crOriginal));
        DECLARE("pfBootConfig",                 offsetof(struct per_proc_info *, pf.pfBootConfig));
+       DECLARE("pfPowerModes",                 offsetof(struct per_proc_info *, pf.pfPowerModes));
+       DECLARE("pmDPLLVmin",                   pmDPLLVmin);
+       DECLARE("pmDPLLVminb",                  pmDPLLVminb);
+       DECLARE("pmPowerTune",                  pmPowerTune);
+       DECLARE("pmPowerTuneb",                 pmPowerTuneb);
+       DECLARE("pmDualPLL",                    pmDualPLL);
+       DECLARE("pmDualPLLb",                   pmDualPLLb);
        DECLARE("pfPTEG",                               offsetof(struct per_proc_info *, pf.pfPTEG));
        DECLARE("pfMaxVAddr",                   offsetof(struct per_proc_info *, pf.pfMaxVAddr));
        DECLARE("pfMaxPAddr",                   offsetof(struct per_proc_info *, pf.pfMaxPAddr));
        DECLARE("pfPTEG",                               offsetof(struct per_proc_info *, pf.pfPTEG));
        DECLARE("pfMaxVAddr",                   offsetof(struct per_proc_info *, pf.pfMaxVAddr));
        DECLARE("pfMaxPAddr",                   offsetof(struct per_proc_info *, pf.pfMaxPAddr));
index f707b92be976f394e306ad1bf19ba653fa3cf5ca..3da5fe9471a93c29c7aec75b9dbacfa8eca85aef 100644 (file)
@@ -3059,7 +3059,7 @@ EXT(lowGlo):
                        .long   0                                                               ; 5008 Zero
                        .long   0                                                               ; 500C Zero cont...
                        .long   EXT(per_proc_info)                              ; 5010 pointer to per_procs
                        .long   0                                                               ; 5008 Zero
                        .long   0                                                               ; 500C Zero cont...
                        .long   EXT(per_proc_info)                              ; 5010 pointer to per_procs
-                       .long   0
+                       .long   0                                                               ;
                        .long   0                                                               ; 5018 reserved
                        .long   0                                                               ; 501C reserved
                        .long   0                                                               ; 5020 reserved
                        .long   0                                                               ; 5018 reserved
                        .long   0                                                               ; 501C reserved
                        .long   0                                                               ; 5020 reserved
index b19994b02935b8d01d1fcfda2c07f3765c2eecd5..e98135ff16a20ca92d9cc974253b4daa79a8fe61 100644 (file)
@@ -855,10 +855,38 @@ mipNSF1:  andc    r6,r6,r10                                               ; Clean up the old power bits
                        beq-    minovec                                                 ; No...
                        dssall                                                                  ; Stop the streams before we nap/doze
 
                        beq-    minovec                                                 ; No...
                        dssall                                                                  ; Stop the streams before we nap/doze
 
-minovec:       sync                                                                    ; Make sure queues are clear                    
-                       mtmsr   r5                                                              ; Nap or doze
+minovec:
+                       bf--    pf64Bitb,mipowloop                              ; skip if 32-bit...
+                       
+                       li              r3,0x10                                                 ; Fancy nap threashold is 0x10 ticks
+                       mftb    r8                                                              ; Get the low half of the time base
+                       mfdec   r4                                                              ; Get the decrementer ticks
+                       cmplw   r4,r3                                                   ; Less than threashold?
+                       blt             mipowloop
+                       
+                       mtdec   r3                                                              ; Load decrimenter with threshold
+                       isync                                                                   ; and make sure,
+                       mfdec   r3                                                              ; really sure, it gets there
+                       
+                       rlwinm  r6,r5,0,MSR_EE_BIT+1,MSR_EE_BIT-1       ; Clear out the EE bit
+                       sync                                                                    ; Make sure queues are clear
+                       mtmsr   r6                                                              ; Set MSR with EE off but POW on
                        isync                                                                   ; Make sure this takes before we proceed
                        isync                                                                   ; Make sure this takes before we proceed
-                       b               minovec                                                 ; loop if POW does not take
+                       
+                       mftb    r9                                                              ; Get the low half of the time base
+                       sub             r9,r9,r8                                                ; Get the number of ticks spent waiting
+                       sub             r4,r4,r9                                                ; Adjust the decrementer value
+                       
+                       mtdec   r4                                                              ; Load decrimenter with the rest of the timeout
+                       isync                                                                   ; and make sure,
+                       mfdec   r4                                                              ; really sure, it gets there
+                       
+mipowloop:
+                       sync                                                                    ; Make sure queues are clear
+                       mtmsr   r5                                                              ; Nap or doze, MSR with POW and EE set
+                       isync                                                                   ; Make sure this takes before we proceed
+                       b               mipowloop                                               ; loop if POW does not take
+
 ;
 ;                      Note that the interrupt handler will turn off the nap/doze bits in the hid.
 ;                      Also remember that the interrupt handler will force return to here whenever
 ;
 ;                      Note that the interrupt handler will turn off the nap/doze bits in the hid.
 ;                      Also remember that the interrupt handler will force return to here whenever
@@ -926,16 +954,15 @@ mpsL2PFok:
 
                        rlwinm  r4,r4,0,sleep+1,doze-1                  ; Clear all possible power-saving modes (not DPM though)
                        oris    r4,r4,hi16(sleepm)                              ; Set sleep
 
                        rlwinm  r4,r4,0,sleep+1,doze-1                  ; Clear all possible power-saving modes (not DPM though)
                        oris    r4,r4,hi16(sleepm)                              ; Set sleep
-                       b       mpsClearDEC
+                       b               mpsClearDEC
 
 mpsPF64bit:
 
 mpsPF64bit:
-                       lis     r5, hi16(dozem|napm|sleepm)                     ; Clear all possible power-saving modes (not DPM though)
+                       lis             r5, hi16(dozem|napm|sleepm)             ; Clear all possible power-saving modes (not DPM though)
                        sldi    r5, r5, 32
                        andc    r4, r4, r5
                        sldi    r5, r5, 32
                        andc    r4, r4, r5
-                       lis     r5, hi16(napm)                                          ; Set sleep
-//                     lis     r5, hi16(dozem)                                         ; Set sleep
+                       lis             r5, hi16(napm)                                  ; Set sleep
                        sldi    r5, r5, 32
                        sldi    r5, r5, 32
-                       or      r4, r4, r5
+                       or              r4, r4, r5
 
 mpsClearDEC:
                        mfmsr   r5                                                              ; Get the current MSR
 
 mpsClearDEC:
                        mfmsr   r5                                                              ; Get the current MSR
@@ -999,10 +1026,24 @@ mpsNoMSRx:
                        ori             r11,r11,SleepState                              ; Marked SleepState
                        sth             r11,PP_CPU_FLAGS(r12)                   ; Set the flags
                        dcbf    r10,r12
                        ori             r11,r11,SleepState                              ; Marked SleepState
                        sth             r11,PP_CPU_FLAGS(r12)                   ; Set the flags
                        dcbf    r10,r12
+                       
+                       mfsprg  r11,2                                                   ; Get CPU specific features
+                       rlwinm. r0,r11,0,pf64Bitb,pf64Bitb              ; Test for 64 bit processor
+                       eqv             r4,r4,r4                                                ; Get all foxes
+                       rlwinm  r4,r4,0,1,31                                    ; Make 0x7FFFFFFF
+                       beq             slSleepNow                                              ; skip if 32-bit...
+                       li              r3, 0x4000                                              ; Cause decrimenter to roll over soon
+                       mtdec   r3                                                              ; Load decrimenter with 0x00004000
+                       isync                                                                   ; and make sure,
+                       mfdec   r3                                                              ; really sure, it gets there
+                       
 slSleepNow:
                        sync                                                                    ; Sync it all up
                        mtmsr   r5                                                              ; Do sleep with interruptions enabled
                        isync                                                                   ; Take a pill
 slSleepNow:
                        sync                                                                    ; Sync it all up
                        mtmsr   r5                                                              ; Do sleep with interruptions enabled
                        isync                                                                   ; Take a pill
+                       mtdec   r4                                                              ; Load decrimenter with 0x7FFFFFFF
+                       isync                                                                   ; and make sure,
+                       mfdec   r3                                                              ; really sure, it gets there
                        b               slSleepNow                                              ; Go back to sleep if we wake up...
                        
 
                        b               slSleepNow                                              ; Go back to sleep if we wake up...
                        
 
@@ -1478,20 +1519,6 @@ cinoexit:        mtspr   hid0,r9                                                 ; Turn off the invalidate (needed for some older m
                        .align  5
                        
 cin64:         
                        .align  5
                        
 cin64:         
-                       li              r10,hi16(dozem|napm|sleepm)             ; Mask of power management bits we want cleared
-                       sldi    r10,r10,32                                              ; Position the masks
-                       andc    r9,r9,r10                                               ; Clean up the old power bits
-                       mr              r4,r9   
-                       isync
-                       mtspr   hid0,r4                                                 ; Set up the HID
-                       mfspr   r4,hid0                                                 ; Yes, this is silly, keep it here
-                       mfspr   r4,hid0                                                 ; Yes, this is a duplicate, keep it here
-                       mfspr   r4,hid0                                                 ; Yes, this is a duplicate, keep it here
-                       mfspr   r4,hid0                                                 ; Yes, this is a duplicate, keep it here
-                       mfspr   r4,hid0                                                 ; Yes, this is a duplicate, keep it here
-                       mfspr   r4,hid0                                                 ; Yes, this is a duplicate, keep it here
-                       isync
-
                        mfspr   r10,hid1                                                ; Save hid1
                        mfspr   r4,hid4                                                 ; Save hid4
                        mr              r12,r10                                                 ; Really save hid1
                        mfspr   r10,hid1                                                ; Save hid1
                        mfspr   r4,hid4                                                 ; Save hid4
                        mr              r12,r10                                                 ; Really save hid1
@@ -1607,7 +1634,17 @@ cflicbi: icbi    0,r6                                                    ; Kill I$
                        mfspr   r3,scomc                                                ; Get back the status
                        sync
                        isync                                                   
                        mfspr   r3,scomc                                                ; Get back the status
                        sync
                        isync                                                   
-                       
+
+                       isync
+                       mtspr   hid0,r9                                                 ; Restore entry hid0
+                       mfspr   r9,hid0                                                 ; Yes, this is silly, keep it here
+                       mfspr   r9,hid0                                                 ; Yes, this is a duplicate, keep it here
+                       mfspr   r9,hid0                                                 ; Yes, this is a duplicate, keep it here
+                       mfspr   r9,hid0                                                 ; Yes, this is a duplicate, keep it here
+                       mfspr   r9,hid0                                                 ; Yes, this is a duplicate, keep it here
+                       mfspr   r9,hid0                                                 ; Yes, this is a duplicate, keep it here
+                       isync
+
                        isync
                        mtspr   hid1,r12                                                ; Restore entry hid1
                        mtspr   hid1,r12                                                ; Stick it again
                        isync
                        mtspr   hid1,r12                                                ; Restore entry hid1
                        mtspr   hid1,r12                                                ; Stick it again
@@ -2000,32 +2037,47 @@ LEXT(ml_sense_nmi)
                        .globl  EXT(ml_set_processor_speed)
 
 LEXT(ml_set_processor_speed)
                        .globl  EXT(ml_set_processor_speed)
 
 LEXT(ml_set_processor_speed)
-                       mfsprg  r5, 0                                                           ; Get the per_proc_info
+                       mfsprg  r5, 0                                                                   ; Get the per_proc_info
 
 
-                       cmpli   cr0, r3, 0                                                      ; Turn off BTIC before low speed
-                       beq     sps1
-                       mfspr   r4, hid0                                                        ; Get the current hid0 value
-                       rlwinm  r4, r4, 0, btic+1, btic-1                                       ; Clear the BTIC bit
+                       lwz             r6, pfPowerModes(r5)                                    ; Get the supported power modes
+
+                       rlwinm. r0, r6, 0, pmDualPLLb, pmDualPLLb               ; Is DualPLL supported?
+                       bne             spsDPLL
+
+                       rlwinm. r0, r6, 0, pmPowerTuneb, pmPowerTuneb   ; Is DualPLL supported?
+                       bne             spsPowerTune
+
+                       b               spsDone                                                                 ; No supported power modes
+
+spsDPLL:
+                       cmpli   cr0, r3, 0                                                              ; Turn off BTIC before low speed
+                       beq             spsDPLL1
+                       mfspr   r4, hid0                                                                ; Get the current hid0 value
+                       rlwinm  r4, r4, 0, btic+1, btic-1                               ; Clear the BTIC bit
                        sync
                        sync
-                       mtspr   hid0, r4                                                        ; Set the new hid0 value
+                       mtspr   hid0, r4                                                                ; Set the new hid0 value
                        isync
                        sync
 
                        isync
                        sync
 
-sps1:
-                       mfspr   r4, hid1                                                        ; Get the current PLL settings
-                       rlwimi  r4, r3, 31-hid1ps, hid1ps, hid1ps                               ; Copy the PLL Select bit
-                       stw     r4, pfHID1(r5)                                                  ; Save the new hid1 value
-                       mtspr   hid1, r4                                                        ; Select desired PLL
+spsDPLL1:
+                       mfspr   r4, hid1                                                                ; Get the current PLL settings
+                       rlwimi  r4, r3, 31-hid1ps, hid1ps, hid1ps               ; Copy the PLL Select bit
+                       stw             r4, pfHID1(r5)                                                  ; Save the new hid1 value
+                       mtspr   hid1, r4                                                                ; Select desired PLL
 
 
-                       cmpli   cr0, r3, 0                                                      ; Restore BTIC after high speed
-                       bne     sps2
-                       lwz     r4, pfHID0(r5)                                                  ; Load the hid0 value
+                       cmpli   cr0, r3, 0                                                              ; Restore BTIC after high speed
+                       bne             spsDone
+                       lwz             r4, pfHID0(r5)                                                  ; Load the hid0 value
                        sync
                        sync
-                       mtspr   hid0, r4                                                        ; Set the hid0 value
+                       mtspr   hid0, r4                                                                ; Set the hid0 value
                        isync
                        sync
                        isync
                        sync
+                       b               spsDone
+
+spsPowerTune:
+                       b               spsDone
 
 
-sps2:
+spsDone:
                        blr
 
 /*
                        blr
 
 /*
@@ -2037,8 +2089,17 @@ sps2:
                        .globl  EXT(ml_set_processor_voltage)
 
 LEXT(ml_set_processor_voltage)
                        .globl  EXT(ml_set_processor_voltage)
 
 LEXT(ml_set_processor_voltage)
-                       mfspr   r4, hid2                                                        ; Get HID2 value
-                       rlwimi  r4, r3, 31-hid2vmin, hid2vmin, hid2vmin                         ; Insert the voltage mode bit
-                       mtspr   hid2, r4                                                        ; Set the voltage mode
-                       sync                                                                    ; Make sure it is done
+                       mfsprg  r5, 0                                                                   ; Get the per_proc_info
+
+                       lwz             r6, pfPowerModes(r5)                                    ; Get the supported power modes
+
+                       rlwinm. r0, r6, 0, pmDPLLVminb, pmDPLLVminb             ; Is DPLL Vmin supported
+                       beq             spvDone
+
+                       mfspr   r4, hid2                                                                ; Get HID2 value
+                       rlwimi  r4, r3, 31-hid2vmin, hid2vmin, hid2vmin ; Insert the voltage mode bit
+                       mtspr   hid2, r4                                                                ; Set the voltage mode
+                       sync                                                                                    ; Make sure it is done
+
+spvDone:
                        blr
                        blr
index ad15ec476bab02acb3556a8a0fe8f8047ae795b2..c4e8c34e9932445bd2d15517207c6377c1433af5 100644 (file)
@@ -38,5 +38,6 @@
 #define PROCESSOR_VERSION_7455         0x8001  /* ? */
 #define PROCESSOR_VERSION_7457         0x8002  /* ? */
 #define PROCESSOR_VERSION_970          0x0039  /* ? */
 #define PROCESSOR_VERSION_7455         0x8001  /* ? */
 #define PROCESSOR_VERSION_7457         0x8002  /* ? */
 #define PROCESSOR_VERSION_970          0x0039  /* ? */
+#define PROCESSOR_VERSION_970FX                0x003C  /* ? */
 
 #endif /* _PPC_SPEC_REG_H_ */
 
 #endif /* _PPC_SPEC_REG_H_ */
index 29c2283623085e0970891cb23e7beb01fc27a248..9d04f2f753d0c48e8942acde43b67ee8f640717d 100644 (file)
 #define ptRevision     6
 #define ptFeatures     8
 #define ptCPUCap       12
 #define ptRevision     6
 #define ptFeatures     8
 #define ptCPUCap       12
-#define ptPatch                16
-#define ptInitRout     20
-#define ptRptdProc     24
-#define ptTempMax      28
-#define ptTempThr      32
-#define ptLineSize     36
-#define ptl1iSize      40
-#define ptl1dSize      44
-#define ptPTEG         48
-#define ptMaxVAddr     52
-#define ptMaxPAddr     56
-#define ptSize         60
+#define ptPwrModes     16
+#define ptPatch                20
+#define ptInitRout     24
+#define ptRptdProc     28
+#define ptTempMax      32
+#define ptTempThr      36
+#define ptLineSize     40
+#define ptl1iSize      44
+#define ptl1dSize      48
+#define ptPTEG         52
+#define ptMaxVAddr     56
+#define ptMaxPAddr     60
+#define ptSize         64
 
 #define bootCPU 10
 #define firstInit 9
 
 #define bootCPU 10
 #define firstInit 9
@@ -181,6 +182,9 @@ donePVR:    lwz             r20,ptInitRout(r26)                                     ; Grab the special init routine
                        lwz             r18,ptRptdProc(r26)                                     ; Get the reported processor
                        sth             r18,pfrptdProc(r30)                                     ; Set the reported processor
                        
                        lwz             r18,ptRptdProc(r26)                                     ; Get the reported processor
                        sth             r18,pfrptdProc(r30)                                     ; Set the reported processor
                        
+                       lwz             r13,ptPwrModes(r26)                                     ; Get the supported power modes
+                       stw             r13,pfPowerModes(r30)                           ; Set the supported power modes
+                       
                        lwz             r13,ptTempMax(r26)                                      ; Get maximum operating temperature
                        stw             r13,thrmmaxTemp(r30)                            ; Set the maximum
                        lwz             r13,ptTempThr(r26)                                      ; Get temprature to throttle down when exceeded
                        lwz             r13,ptTempMax(r26)                                      ; Get maximum operating temperature
                        stw             r13,thrmmaxTemp(r30)                            ; Set the maximum
                        lwz             r13,ptTempThr(r26)                                      ; Get temprature to throttle down when exceeded
@@ -855,6 +859,7 @@ initUnsupported:
 ;      .short  ptRevision              - Revision code from PVR. A zero value denotes the generic attributes if not specific
 ;      .long   ptFeatures              - Available features
 ;      .long   ptCPUCap                - Default value for _cpu_capabilities
 ;      .short  ptRevision              - Revision code from PVR. A zero value denotes the generic attributes if not specific
 ;      .long   ptFeatures              - Available features
 ;      .long   ptCPUCap                - Default value for _cpu_capabilities
+;      .long   ptPwrModes              - Available power management features
 ;      .long   ptPatch                 - Patch features
 ;      .long   ptInitRout              - Initilization routine.  Can modify any of the other attributes.
 ;      .long   ptRptdProc              - Processor type reported
 ;      .long   ptPatch                 - Patch features
 ;      .long   ptInitRout              - Initilization routine.  Can modify any of the other attributes.
 ;      .long   ptRptdProc              - Processor type reported
@@ -879,6 +884,7 @@ processor_types:
                        .short  0x4202
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
                        .short  0x4202
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init750
                        .long   CPU_SUBTYPE_POWERPC_750
                        .long   PatchExt32
                        .long   init750
                        .long   CPU_SUBTYPE_POWERPC_750
@@ -899,6 +905,7 @@ processor_types:
                        .short  0x0200
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
                        .short  0x0200
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init750CX
                        .long   CPU_SUBTYPE_POWERPC_750
                        .long   PatchExt32
                        .long   init750CX
                        .long   CPU_SUBTYPE_POWERPC_750
@@ -919,6 +926,7 @@ processor_types:
                        .short  0
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pfThermal | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
                        .short  0
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pfThermal | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init750
                        .long   CPU_SUBTYPE_POWERPC_750
                        .long   PatchExt32
                        .long   init750
                        .long   CPU_SUBTYPE_POWERPC_750
@@ -939,6 +947,7 @@ processor_types:
                        .short  0x0100
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pfSlowNap | pfNoMuMMCK | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
                        .short  0x0100
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pfSlowNap | pfNoMuMMCK | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
+                       .long   pmDualPLL
                        .long   PatchExt32
                        .long   init750FX
                        .long   CPU_SUBTYPE_POWERPC_750
                        .long   PatchExt32
                        .long   init750FX
                        .long   CPU_SUBTYPE_POWERPC_750
@@ -959,6 +968,7 @@ processor_types:
                        .short  0
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pfSlowNap | pfNoMuMMCK | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
                        .short  0
                        .long   pfFloat | pfCanSleep | pfCanNap | pfCanDoze | pfSlowNap | pfNoMuMMCK | pf32Byte | pfL2
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
+                       .long   pmDualPLL | pmDPLLVmin
                        .long   PatchExt32
                        .long   init750FXV2
                        .long   CPU_SUBTYPE_POWERPC_750
                        .long   PatchExt32
                        .long   init750FXV2
                        .long   CPU_SUBTYPE_POWERPC_750
@@ -979,6 +989,7 @@ processor_types:
                        .short  0x0200
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pfThermal | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0x0200
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pfThermal | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init7400v2_7
                        .long   CPU_SUBTYPE_POWERPC_7400
                        .long   PatchExt32
                        .long   init7400v2_7
                        .long   CPU_SUBTYPE_POWERPC_7400
@@ -999,6 +1010,7 @@ processor_types:
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pfThermal | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pfThermal | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init7400
                        .long   CPU_SUBTYPE_POWERPC_7400
                        .long   PatchExt32
                        .long   init7400
                        .long   CPU_SUBTYPE_POWERPC_7400
@@ -1019,6 +1031,7 @@ processor_types:
                        .short  0x1101
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0x1101
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init7410
                        .long   CPU_SUBTYPE_POWERPC_7400
                        .long   PatchExt32
                        .long   init7410
                        .long   CPU_SUBTYPE_POWERPC_7400
@@ -1039,6 +1052,7 @@ processor_types:
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfCanDoze | pf32Byte | pfL1fa | pfL2 | pfL2fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init7410
                        .long   CPU_SUBTYPE_POWERPC_7400
                        .long   PatchExt32
                        .long   init7410
                        .long   CPU_SUBTYPE_POWERPC_7400
@@ -1059,6 +1073,7 @@ processor_types:
                        .short  0x0100
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa  | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0x0100
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa  | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init7450
                        .long   CPU_SUBTYPE_POWERPC_7450
                        .long   PatchExt32
                        .long   init7450
                        .long   CPU_SUBTYPE_POWERPC_7450
@@ -1079,6 +1094,7 @@ processor_types:
                        .short  0x0200
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0x0200
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init7450
                        .long   CPU_SUBTYPE_POWERPC_7450
                        .long   PatchExt32
                        .long   init7450
                        .long   CPU_SUBTYPE_POWERPC_7450
@@ -1099,6 +1115,7 @@ processor_types:
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfWillNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfWillNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init7450
                        .long   CPU_SUBTYPE_POWERPC_7450
                        .long   PatchExt32
                        .long   init7450
                        .long   CPU_SUBTYPE_POWERPC_7450
@@ -1119,6 +1136,7 @@ processor_types:
                        .short  0x0100
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0x0100
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init745X
                        .long   CPU_SUBTYPE_POWERPC_7450
                        .long   PatchExt32
                        .long   init745X
                        .long   CPU_SUBTYPE_POWERPC_7450
@@ -1139,6 +1157,7 @@ processor_types:
                        .short  0x0200
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfWillNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0x0200
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfWillNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init745X
                        .long   CPU_SUBTYPE_POWERPC_7450
                        .long   PatchExt32
                        .long   init745X
                        .long   CPU_SUBTYPE_POWERPC_7450
@@ -1159,6 +1178,7 @@ processor_types:
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init745X
                        .long   CPU_SUBTYPE_POWERPC_7450
                        .long   PatchExt32
                        .long   init745X
                        .long   CPU_SUBTYPE_POWERPC_7450
@@ -1179,6 +1199,7 @@ processor_types:
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pfNoMSRir | pfNoL2PFNap | pfLClck | pf32Byte | pfL2 | pfL2fa | pfL2i | pfL3 | pfL3fa | pfHasDcba
                        .long   kHasAltivec | kCache32 | kDcbaAvailable | kDataStreamsRecommended | kDataStreamsAvailable | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   init745X
                        .long   CPU_SUBTYPE_POWERPC_7450
                        .long   PatchExt32
                        .long   init745X
                        .long   CPU_SUBTYPE_POWERPC_7450
@@ -1191,6 +1212,27 @@ processor_types:
                        .long   52
                        .long   36
 
                        .long   52
                        .long   36
 
+;      970FX DD1.0
+
+                       .align  2
+                       .long   0xFFFFFF00              ; All versions so far
+                       .short  PROCESSOR_VERSION_970
+                       .short  0x1100
+                       .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pf128Byte | pf64Bit | pfL2
+                       .long   kHasAltivec | k64Bit | kCache128 | kDataStreamsAvailable | kDcbtStreamsRecommended | kDcbtStreamsAvailable | kHasGraphicsOps | kHasStfiwx | kHasFsqrt
+                       .long   pmPowerTune
+                       .long   PatchLwsync
+                       .long   init970
+                       .long   CPU_SUBTYPE_POWERPC_970
+                       .long   105
+                       .long   90
+                       .long   128
+                       .long   64*1024
+                       .long   32*1024
+                       .long   128
+                       .long   65
+                       .long   42
+
 ;      970
 
                        .align  2
 ;      970
 
                        .align  2
@@ -1199,6 +1241,28 @@ processor_types:
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pf128Byte | pf64Bit | pfL2 | pfSCOMFixUp
                        .long   kHasAltivec | k64Bit | kCache128 | kDataStreamsAvailable | kDcbtStreamsRecommended | kDcbtStreamsAvailable | kHasGraphicsOps | kHasStfiwx | kHasFsqrt
                        .short  0
                        .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pf128Byte | pf64Bit | pfL2 | pfSCOMFixUp
                        .long   kHasAltivec | k64Bit | kCache128 | kDataStreamsAvailable | kDcbtStreamsRecommended | kDcbtStreamsAvailable | kHasGraphicsOps | kHasStfiwx | kHasFsqrt
+                       .long   0
+                       .long   PatchLwsync
+                       .long   init970
+                       .long   CPU_SUBTYPE_POWERPC_970
+                       .long   105
+                       .long   90
+                       .long   128
+                       .long   64*1024
+                       .long   32*1024
+                       .long   128
+                       .long   65
+                       .long   42
+
+;      970FX
+
+                       .align  2
+                       .long   0xFFFF0000              ; All versions so far
+                       .short  PROCESSOR_VERSION_970FX
+                       .short  0
+                       .long   pfFloat | pfAltivec | pfSMPcap | pfCanSleep | pfCanNap | pf128Byte | pf64Bit | pfL2
+                       .long   kHasAltivec | k64Bit | kCache128 | kDataStreamsAvailable | kDcbtStreamsRecommended | kDcbtStreamsAvailable | kHasGraphicsOps | kHasStfiwx | kHasFsqrt
+                       .long   pmPowerTune
                        .long   PatchLwsync
                        .long   init970
                        .long   CPU_SUBTYPE_POWERPC_970
                        .long   PatchLwsync
                        .long   init970
                        .long   CPU_SUBTYPE_POWERPC_970
@@ -1219,6 +1283,7 @@ processor_types:
                        .short  0
                        .long   pfFloat | pf32Byte
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
                        .short  0
                        .long   pfFloat | pf32Byte
                        .long   kCache32 | kHasGraphicsOps | kHasStfiwx
+                       .long   0
                        .long   PatchExt32
                        .long   initUnsupported
                        .long   CPU_SUBTYPE_POWERPC_ALL
                        .long   PatchExt32
                        .long   initUnsupported
                        .long   CPU_SUBTYPE_POWERPC_ALL
index aa82856e826fd361e492c2fc8823a62ceea73418..bc24ba10ff0740c60b7e175bb27b65e2b0a6e39e 100644 (file)
@@ -5379,6 +5379,13 @@ vm_map_copyin_common(
                return(KERN_SUCCESS);
        }
 
                return(KERN_SUCCESS);
        }
 
+       /*
+        *      Check that the end address doesn't overflow
+        */
+       src_end = src_addr + len;
+       if (src_end < src_addr)
+               return KERN_INVALID_ADDRESS;
+
        /*
         * If the copy is sufficiently small, use a kernel buffer instead
         * of making a virtual copy.  The theory being that the cost of
        /*
         * If the copy is sufficiently small, use a kernel buffer instead
         * of making a virtual copy.  The theory being that the cost of
@@ -5390,22 +5397,13 @@ vm_map_copyin_common(
                                             src_destroy, copy_result);
 
        /*
                                             src_destroy, copy_result);
 
        /*
-        *      Compute start and end of region
+        *      Compute (page aligned) start and end of region
         */
         */
-
        src_start = trunc_page_32(src_addr);
        src_start = trunc_page_32(src_addr);
-       src_end = round_page_32(src_addr + len);
+       src_end = round_page_32(src_end);
 
        XPR(XPR_VM_MAP, "vm_map_copyin_common map 0x%x addr 0x%x len 0x%x dest %d\n", (natural_t)src_map, src_addr, len, src_destroy, 0);
 
 
        XPR(XPR_VM_MAP, "vm_map_copyin_common map 0x%x addr 0x%x len 0x%x dest %d\n", (natural_t)src_map, src_addr, len, src_destroy, 0);
 
-       /*
-        *      Check that the end address doesn't overflow
-        */
-
-       if (src_end <= src_start)
-               if ((src_end < src_start) || (src_start != 0))
-                       return(KERN_INVALID_ADDRESS);
-
        /*
         *      Allocate a header element for the list.
         *
        /*
         *      Allocate a header element for the list.
         *
index 0cfbf08886fca9a91cb753ec8734c84fcbe52c9f..00750edc07d6415dcc07ae0351e9397b0222b7ba 100644 (file)
@@ -1 +1 @@
-2
+3