changeset 0:01387a2e419e

initial version
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 07 Dec 2010 15:39:45 +0900
parents
children 92dccc071a24
files Bom.c ChangeLog Character.c Character.h Character_state.c Character_state.h Enemy.c Enemy.h LoadSprite.c LoadSprite.h Makefile Makefile.demo Makefile.mac Makefile.ps3 Ss.c Ss.h atari.c atari.h b64_de.c back.c back.h bom.h bool.h collision.c collision.h count2.c count2.h debug.c debug.h error.h main.c make.c move.c move.h object.c object.h profile.c profile.h sankaku.c sankaku.h schedule.h schedule3.c scheduletest.c sgoex.c sgoex.h sound.c sound.h sound/NEW.wav sound/bomber.wav sound/jikiout.wav sound/ring.wav sound/sample.wav sound/shota.wav sound/shotb.wav sound/shotc.wav syokika.c syokika.h sys.c sys.h tama.c tama.h tama2.c testgl.c testgl.h texture.h tokuten.c tokuten.h trace.c trace.h tree_controll.c tree_controll.h xml.c xml.h xml/boss.xml xml/character.xml xml/effect.xml xml/font.xml
diffstat 76 files changed, 120207 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Bom.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,71 @@
+#include <stdlib.h>
+#include <SDL.h>
+#include "object.h"
+#include "bom.h"
+//#include "libps.h"
+#include "sgoex.h"
+#include"debug.h"
+
+int sb_x, sb_y;
+int sb_size = -1;
+int count;
+int se_voice[9];
+int vab[10];
+
+bomchar bchar[100];
+bomchar *bom_p;
+int bomend = -1;
+
+
+void Bom(int x, int y)
+{
+    int i;
+    bomend++;
+    if (bomend > 49) {
+	bomend = 49;
+	return;
+    }
+
+    i = bomend;
+    bchar[i].x = x;
+    bchar[i].y = y;
+    bchar[i].no = 0;
+    bchar[i].f = 0;
+    //se_voice[0] = SsUtKeyOn(vab[0], 0, 0, 65, 0, 60, 60);
+    return;
+}
+
+void Putbom()
+{
+    int i;
+    for (i = 0; i < bomend + 1; i++) {
+	if (bchar[i].no != 8) {
+	    count++;
+	    DefSpriteEx(30 + bchar[i].no, 8, 8);
+	    //	    PutSprite(count, bchar[i].x, bchar[i].y, 30 + bchar[i].no);
+	    PutSpriteEx(30 + bchar[i].no, bchar[i].x+96, bchar[i].y+96, 2, 2, 1);
+	    bchar[i].no++;
+
+	}
+	if (bchar[i].no == 8) {
+	  //SsUtKeyOff(se_voice[0], vab[0], 0, 0, 65);
+	    if (bomend == i) {
+		bomend--;
+		break;
+	    }
+	    if (bomend > i) {
+		bchar[i] = bchar[bomend];
+		bomend--;
+		i--;
+	    }
+	}
+    }
+}
+
+void Superbom(int x, int y)
+{
+    Bom(x + rand() % 128 - 64, y + rand() % 128 - 32);
+    /*sb_x = x; sb_y = y;
+       sb_size = 0; */
+    return;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ChangeLog	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,64 @@
+2008-07-18  Wataru MIYAGUNI  <gongo@cr.ie.u-ryukyu.ac.jp>
+
+	* 使い方
+	README に書くもんだろうけど、あえてここで!
+
+	- コンパイル
+	PS3上でコンパイルするなら
+
+	  % make -f Makefile.ps3
+
+	でおk。多分一発で通るはず。だといいな〜。
+	SDL_image とか SDL_mixer のエラーが出たら
+	ライブラリをインストールするなり、パスを修正するなり
+
+	- 実行
+
+	  % ./demo
+
+	で実行できます。SDL 経由で X Window に描画するので
+
+	  % ssh -X ps3
+
+	でリモートログインの後実行しても見れます。
+
+	タイトル画面が写るまでと、タイトル画面でスタート押した後は
+	データロードで忙しいので遅いかもしれない。気長に。
+	あと、タイトル画面でのスタートは、ちょっと気持ち長押し程度に。
+	
+	- 実行のオプション
+
+	  -width  ウィンドウの横の長さ
+	  -height ウィンドウの縦の長さ
+
+	いまはこれだけかな。
+
+	- ボタン配置
+
+	  x : 通常の青い奴
+	  s : 赤い強い弾
+	  z : 輪っかの弾
+	  a : 相手の弾を消せる青いフィールド発生
+	  q : L2 (No use)
+	  w : L1 (No use)
+	  e : R1。a と z の向きを回転で変える。
+	  r : R2 (No use)
+
+	  Return: スタート (ポーズ中の解除も)
+	  2 : セレクト (ゲーム中のポーズ)
+	  q+w+e+r: ゲーム中に押すと最初から (画面がクリアされないので注意)
+	  0 : プログラム終了。終了後のプロンプトの速度とFPSが表示。
+	
+	- 注意
+	リモートログインで実行すると、おそらく
+
+	  ALSA lib ****
+
+	ってエラーメッセージがでるはず。
+	これは SDL_mixer のエラーで、要はリモートだと
+	音が再生できないってことです
+	音が再生できない場合は、音を鳴らさないようにしているので
+	無音でなら動きます。きっと。
+
+	- その他
+	何かあったら上のメアドに連絡くれ。もしくは直接
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Character.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,233 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "syokika.h"
+#include "bool.h"
+#include <SDL.h>
+#include "SDL_opengl.h"
+#include "object.h"
+#include "Character.h"
+#include "Character_state.h"
+#include "count2.h"
+#include "tokuten.h"
+#include "schedule.h"
+#include "sankaku.h"
+#include "sgoex.h"
+#include "collision.h"
+#include "debug.h"
+
+#include "error.h"
+
+#define CHARACTER_MAX_POOL_SIZE 2048
+
+
+const table enemystate[] = ENEMY_STATUS_TABLE;
+int filpcount = 0;
+int stage = 0;
+BOOL tf = FALSE;
+static int pool_size;
+
+int init_chara_list(int num)
+{
+  if(active_chara_list == NULL)
+    {
+      return extend_chara_list_pool(num);
+    }
+  return 1;
+}
+
+int
+extend_chara_list_pool(int num)
+{
+
+  pool_size = num;
+  /*
+  q = (CHARACTER*)malloc(sizeof(CHARACTER)*(num+1));
+  
+  if(!q){
+    return 0;
+  }
+
+  q->next = active_chara_list;
+  active_chara_list = q;
+
+  q = active_chara_list + 1;
+  for(q = active_chara_list +1;num-->0;q++)
+    {
+      q->next = q+1;
+    }
+  q->next = free_chara_list;
+  free_chara_list = active_chara_list+1;
+  */
+  __debug("task init start");
+
+  int i;
+  CHARACTER *q[num];
+  
+  for(i = 0; i<num ; i++)
+    {
+      q[i] = (CHARACTER*)malloc(sizeof(CHARACTER));
+      q[i]->f = FALSE;
+      q[i]->state = noaction;
+      q[i]->collision = noaction;
+    }
+
+  for(i = 0; i<num-1 ; i++)
+    {
+      q[i]->next = q[i+1];
+      //q[i]->next->prev = q[i];
+    }
+  
+  q[num-1]->next = NULL;
+  active_chara_list = (CHARACTER*)malloc(sizeof(CHARACTER));
+  active_chara_list->f = FALSE;
+  active_chara_list->state = noaction;
+  active_chara_list->collision = noaction;
+  active_chara_list->next = q[0];
+  //q[0]->prev = active_chara_list;
+  //active_chara_list->prev = q[num-1];
+  //q[num-1]->next = active_chara_list;
+  CHARACTER *p;
+
+  for(p = active_chara_list->next; p != NULL ; p = p->next)
+    {
+      if(p != NULL)
+	{
+	    __debug("list_test");
+	}
+    }
+  return 1;
+
+}
+
+void TFon()
+{
+  tf = TRUE;
+}
+
+void TFoff()
+{
+  tf = FALSE;
+}
+
+
+void 
+Putenemy(int charano, float x, float y, float vx, float vy,
+	 CHARACTER * (*action)(CHARACTER *chara))
+{
+  CHARACTER *q;
+  /*
+  if(!free_chara_list)
+    {
+      pool_size *= 2;
+      if(pool_size > CHARACTER_MAX_POOL_SIZE)
+	{
+	  printf("pool_size over\n");
+	  SDL_Quit();
+	  exit(1);
+	}
+      if (!extend_chara_list_pool(pool_size)) 
+	{
+	  printf("failed to memory allocate\n");
+	  SDL_Quit();
+	  exit(1);
+	}
+    }
+  */
+
+  for(q = active_chara_list->next; q != NULL ;q = q->next)
+    {
+      if(q->f == FALSE)
+	{
+	  break;
+	}
+    }
+
+  q->state = action;
+  q->collision = atari;
+  q->x = x;
+  q->y = y;
+  q->vx = vx;
+  q->vy = vy;
+  q->tama = tf;
+  q->vit = enemystate[charano].p;
+  q->score = enemystate[charano].sc;
+  q->charano = enemystate[charano].charano;
+  q->s = 0;
+  q->f = TRUE;
+  //q->state = ALIVE;
+  //q->group = ENEMY
+
+}
+
+CHARACTER *
+delete_chara(CHARACTER *p)
+{
+  /*
+  CHARACTER * parent = p->prev;
+  p->state = noaction;
+  p->prev->next = p->next;
+  p->next->prev = p->prev;
+  
+  p->next = free_chara_list->next;
+  free_chara_list->next = p;
+  */
+
+  CHARACTER *parent = p;
+  p->f = FALSE;
+  p->state = noaction;
+  p->collision = noaction;
+  return parent;
+}
+
+void state_update()
+{
+  CHARACTER *p;
+  for(p = active_chara_list->next; p!= NULL  ;p = p->next)
+    {
+      p=(*p->state)(p);
+    }
+}
+
+void collision_detect()
+{
+  CHARACTER *p;
+  for(p = active_chara_list->next; p!=NULL;p = p->next)
+    {
+      if((p->state != chara_state8) && (p->state != chara_state9))
+	{
+	  p=(*p->collision)(p);
+	}
+    }
+}
+
+void obj_draw()
+{
+  CHARACTER *p;
+  for(p = active_chara_list->next; p!=NULL;p = p->next)
+    {
+      if(p->f == TRUE)
+      {
+	  PutSprite(1, p->x, p->y, p->charano);
+      }
+    }
+}
+
+void outofwindow()
+{
+  CHARACTER *p;
+  for(p = active_chara_list->next; p!=NULL; p = p->next)
+    {
+      if((p->state != chara_state8) && (p->state != chara_state9))
+	{
+	  if ((p->y > 964 + 32)
+	      || (p->x > 1688 + 50)
+	      || (p->y < 0 - 128)
+	      || (p->x < 0 - 200))
+	    {
+	      p->f = FALSE;
+	      p->state = delete_chara;
+	      p->collision = noaction;
+	    }
+	}
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Character.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,140 @@
+#include "bool.h"
+
+#ifndef CHARACTER_h
+#define CHARACTER_h 1
+
+/*state id*/
+#define ALIVE 0
+#define EXPLODE 1
+#define DELETE 2
+
+/*group id*/
+#define MYSHIP 0
+#define MYBULLET 1
+#define ENEMY 2
+#define ENEMYBULLET 3
+
+//typedef void (*STATE)(CHARACTER *p);
+
+typedef struct enemy_status {
+  int charano;                 // sprite image number
+  int sc;                     // score
+  int p;                      // hardness
+} table;
+
+
+typedef struct CHARACTER{
+  float x; //position
+  float y;
+ 
+  float vx; //velocity
+  float vy;
+
+  float vit; //vitality
+  int score;
+  int dt1;
+  int dt2;
+  int charano; //sprite_number
+  BOOL tama; //bullet identifier
+  BOOL f; //apiarance idenfifier
+  float s;
+  //int group;
+  
+  struct CHARACTER * (*state)(struct CHARACTER *p);
+  struct CHARACTER * (*collision)(struct CHARACTER *p);
+  //STATE state;
+  //STATE collision;
+  struct CHARACTER *next;
+  struct CHARACTER *prev;
+
+} CHARACTER;
+
+
+CHARACTER *active_chara_list;
+CHARACTER *free_chara_list;
+extern CHARACTER *kyeenemyno;
+extern CHARACTER *tekino0;
+extern CHARACTER *enemy_part1;
+extern CHARACTER *enemy_part2;
+extern CHARACTER *enemy_part3;
+extern CHARACTER *enemy_part4;
+extern CHARACTER *enemy_part5;
+
+extern int filpcount;
+extern int stage;
+//extern teki enemy[300];
+extern const table enemystate[50];
+
+int init_chara_list(int num);
+int extend_chara_list_pool(int num);
+void TFon();
+void TFoff();
+void Putenemy(int charano, float x, float y, float vx, float vy,
+	      CHARACTER * (*action)(CHARACTER *chara));
+CHARACTER * delete_chara(CHARACTER *p);
+void state_update();
+void collision_detect();
+void obj_draw();
+void outofwindow();
+
+#define ENEMY_STATUS(id,charno,score,hardness) {charno,score,hardness}
+
+/**
+ * enemyの種類一覧
+ */
+#define ENEMY_STATUS_TABLE {\
+      ENEMY_STATUS(UNUSED0,			0, 0, 0),\
+      ENEMY_STATUS(ID_GREENCRAB,		ENEMY_GREENCRAB,	330, 98),\
+      ENEMY_STATUS(ID_PLANE,			ENEMY_PLANE,		470, 37),\
+      ENEMY_STATUS(ID_REDBULLET,		ENEMY_REDBULLET,	30, 16),\
+      ENEMY_STATUS(ID_BOSS1ORGAN,		BOSS1_ORGAN,		25000, 10000),\
+      ENEMY_STATUS(ID_BOSS1SIDEPARTS,		BOSS1_ORGAN,		10000, 10000),\
+      ENEMY_STATUS(ID_BLUEBULLET,		ENEMY_BLUEBULLET,	40, 39),\
+      ENEMY_STATUS(ID_LASER,			ENEMY_LASER,		100, 100000),\
+      ENEMY_STATUS(ID_LIGHTNING,		ENEMY_LIGHTNING,	100, 100000),\
+      ENEMY_STATUS(ID_ASTEROID,			ASTEROID,		170, 500),\
+      ENEMY_STATUS(ID_ASTEROIDID_BOSS2BODY,	BOSS2_BODY,		100, 500),\
+      ENEMY_STATUS(ID_BOSS2LEFTSHOULDER,	BOSS2_LEFTSHOULDER,	10000, 12000),\
+      ENEMY_STATUS(ID_BOSS2RIGHTSHOULDER,	BOSS2_RIGHTSHOULDER,	10000, 12000),\
+      ENEMY_STATUS(ID_BOSS2RIGHTARM,		BOSS2_RIGHTARM,		5000, 15000),\
+      ENEMY_STATUS(ID_BOSS2LEFTARM,		BOSS2_LEFTARM,		5000, 15000),\
+      ENEMY_STATUS(ID_BOSS2BATTERY,		BOSS2_BATTERY,		10000, 5000),\
+      ENEMY_STATUS(ID_BOSS2OPENBATTERY,		BOSS2_OPENBATTERY,	10000, 5000),\
+      ENEMY_STATUS(ID_BOSS2BROKENHATCH,		BOSS2_BROKENHATCH,	100, 500),\
+      ENEMY_STATUS(ID_BOSS2DUMMY,		BOSS2_DUMMY,		50000, 15000),\
+      ENEMY_STATUS(ID_BOSS2RIGHTSHOULDERUP,	BOSS2_RIGHTSHOULDERUP,	10000, 20000),\
+      ENEMY_STATUS(ID_BOSS2LEFTSHOULDERUP,	BOSS2_LEFTSHOULDERUP,	10000, 15000),\
+      ENEMY_STATUS(ID_BOSS2LEFTSHOULDERGIRD,	BOSS2_LEFTSHOULDERGIRD,	100, 20000),\
+      ENEMY_STATUS(ID_BOSS2RIGHTARMBATTERY,	BOSS2_RIGHTARMBATTERY,	100, 500),\
+      ENEMY_STATUS(ID_BOSS2LEFTARMBATTERY,	BOSS2_LEFTARMBATTERY,	100, 500),\
+      ENEMY_STATUS(ID_ORBIT,			ORBITMACHINE,		20, 1000000),\
+      ENEMY_STATUS(UNUSED1,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED2,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED3,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED4,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED5,			0, 0, 0),\
+      ENEMY_STATUS(ID_BLACK_HOLE,		BLACKHOLE,		200000, 30000),\
+      ENEMY_STATUS(UNUSED6,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED7,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED8,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED9,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED10,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED11,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED12,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED13,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED14,			0, 0, 0),\
+      ENEMY_STATUS(ID_GUN_BATTERY,		GUNBATTERY,		540, 137),\
+      ENEMY_STATUS(ID_PURPLE_CORE,		PURPLECORE,		840, 287),\
+      ENEMY_STATUS(ID_SPACE_FISH,		SPACEFISH,		370, 137),\
+      ENEMY_STATUS(ID_AUTOMISSILE,		MISSILE,		210, 24),\
+      ENEMY_STATUS(ID_BOSS3,			BOSS3_BODY,		100000, 9600),\
+      ENEMY_STATUS(UNUSED15,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED16,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED17,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED18,			0, 0, 0),\
+      ENEMY_STATUS(ID_BOSS4,			BODD4_BODY,		300000, 20400)\
+}
+
+//#define ENEMY_STATUS(id,charno,score,hardness) id
+//typedef enum ENEMY_STATUS EnemyId;
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Character_state.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,1182 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <SDL.h>
+#include "SDL_opengl.h"
+#include "object.h"
+#include "Character.h"
+#include "Character_state.h"
+#include "count2.h"
+#include "schedule.h"
+#include "bom.h"
+#include "sankaku.h"
+#include "sgoex.h"
+#include "collision.h"
+#include "debug.h"
+#include "tama.h"
+
+CHARACTER *kyeenemyno;
+CHARACTER *tekino0;
+CHARACTER *enemy_part1;
+CHARACTER *enemy_part2;
+CHARACTER *enemy_part3;
+CHARACTER *enemy_part4;
+CHARACTER *enemy_part5;
+
+//int tekino0;
+int rinkx;
+int rinky;
+int rinkf1 = 0, rinkf2 = 0;
+CHARACTER *asteroiddt[200];
+int asteroidi = 0;
+int enemyfaste = 0;
+int sf;
+int amari;
+int fastebos = 0;
+
+CHARACTER * noaction(CHARACTER *p)
+{
+  p->state = noaction;
+  return p;
+}
+
+CHARACTER * chara_state0(CHARACTER *p)
+{
+  p->x += p->vx;
+  p->y += p->vy;
+  p->state = chara_state0;
+  //PutSprite(count, p->x, p->y, p->charano);
+  return p;
+}
+
+CHARACTER * chara_state1(CHARACTER *p)
+{
+  p->x -= p->vx;
+  p->y -= p->vy;
+  p->state = chara_state1;
+  //PutSprite(count, p->x, p->y, p->charano);
+  return p;
+}
+
+CHARACTER * chara_state2(CHARACTER *p)
+{
+  p->vy -= 0.25;
+  p->y += p->vy;
+  p->state = chara_state2;
+  //PutSprite(count, p->x, p->y, p->charano);
+  return p;
+}
+
+CHARACTER * chara_state3(CHARACTER *p)
+{
+  p->x += p->vx;
+  p->y += p->vy;
+  if((p->dt1 == 60) ||
+     (p->dt1 == 90) ||
+     (p->dt1 == 30))
+    {
+      Puttama(0, p->x, p->y);
+    }
+  p->dt1++;
+  p->state = chara_state3;
+  //PutSprite(count, p->x, p->y, p->charano);
+  return p;
+}
+
+CHARACTER * chara_state4(CHARACTER *p)
+{
+  p->y += p->vy;
+  p->x += p->vx;
+  if(p->y < jiki.y && p->y + 16 > jiki.y)
+    {
+      p->vy = -2;
+      p->vx = ((jiki.x > p->x) ? 4 : -4);
+      p->state = chara_state7;
+    }
+  else p->state = chara_state4;
+  //PutSprite(count, p->x, p->y, p->charano);
+  return p;
+}
+
+CHARACTER * chara_state5(CHARACTER *p)
+{
+  p->y += p->vy;
+  p->x += p->vx;
+  if(p->y + 96 < jiki.y 
+     && p->y + 128 > jiki.y)
+    {
+      p->vy = -2;
+      p->vx = ((jiki.x > p->x) ? 4 : -4);
+      p->state = chara_state0;
+    }
+  else p->state = chara_state5;
+  //PutSprite(count, p->x, p->y, p->charano);
+  return p;
+}
+
+CHARACTER * chara_state6(CHARACTER *p)
+{
+  p->y += p->vy;
+  p->x += p->vx;
+  if(p->y + 96 < jiki.y
+     && p->y + 128 > jiki.y)
+    {
+      p->vy = 2;
+      p->vx = ((jiki.x > p->x) ? 4 : -4);
+      p->state = chara_state0;
+    }
+  else p->state = chara_state6;
+  //PutSprite(count, p->x, p->y, p->charano);
+  return p;
+}
+
+CHARACTER * chara_state7(CHARACTER *p)
+{
+  p->x += p->vx;
+  p->y += p->vy;
+  if((p->dt1 == 60) || (p->dt1 == 90)
+     || (p->dt1 == 30))
+    {
+      Puttama(1, p->x, p->y);
+    }
+  p->dt1++;
+  p->state = chara_state7;
+  //PutSprite(count, p->x, p->y, p->charano);
+  return p;
+}
+
+// state1 boss patern
+CHARACTER * chara_state8(CHARACTER *p)
+{
+  if(p->y < 520)
+    {
+      tekino0 = p;
+      kyeenemyno = p;
+      p->y += p->vy;
+      count++;
+      DefSpriteEx(p->charano, 16*4, 32*4);
+      PutSpriteEx(p->charano, (p->x * 4), (p->y * 4), 0.2, 0.2, 1);
+      p->dt1 = 512;
+      p->s = 0.125;
+      p->state = chara_state8;
+      return p;
+    }
+  p->state = chara_state9;
+  return p;
+}
+
+CHARACTER * chara_state9(CHARACTER *p)
+{
+  if(p->s <= 2)
+    {
+      p->s += 0.05;
+      p->y -= 12;
+      count++;
+      DefSpriteEx(54, 16*4, 32*4);
+      PutSpriteEx(54, (p->x * 4), (p->y * 4), p->s, p->s, 1);
+      p->state = chara_state9;
+      return p;
+    }
+  count++;
+  DefSpriteEx(54, 16, 32);
+  PutSpriteEx(54, p->x, p->y, p->s, p->s, 1);
+  rinkx = p->x;
+  rinky = p->y;
+  Putenemy(5, rinkx - 16, rinky - 16, 1, 0, chara_state10);
+  Putenemy(5, rinkx - 16, rinky - 16, -1, 0, chara_state10);
+  p->state = chara_state11;
+  p->dt1 = 8192;
+  return p;
+}
+
+
+CHARACTER * chara_state10(CHARACTER *p)
+{
+  if(p->dt1 < 48)
+    {
+      p->x += p->vx;
+      p->y += p->vy;
+      p->dt1++;
+      p->state = chara_state10;
+      //PutSprite(count, p->x, p->y,
+      return p;
+    }
+  rinkf1 = 1;
+  p->dt1 = rinkx;
+  p->dt2 = rinky;
+  p->state = chara_state13;
+  return p;
+}
+
+
+CHARACTER * chara_state11(CHARACTER *p)
+{
+  if(rinkf1 == 0)
+    {
+      count++;
+      DefSpriteEx(54, 16, 32);
+      PutSpriteEx(54, p->x, p->y, p->s, p->s, 1);
+      p->state = chara_state11;
+      return p;
+    }
+  p->dt1 = 0;
+  p->dt2 = 0;
+  p->state = chara_state12;
+  return p;
+}
+
+CHARACTER * chara_state12(CHARACTER *p)
+{
+  if(fastebos > 60*60)
+    {
+      if(p->y > 240+32)
+	{
+	  p->state = delete_chara;
+	}
+      p->y += 3;
+      rinky += 3;
+      count++;
+      DefSpriteEx(54, 16, 32);
+      PutSpriteEx(54, p->x, p->y, 2, 2, 1);
+      p->state = chara_state12;
+      return p;
+    }
+  if(p->dt1 <= 60)
+    {
+      if(jiki.x + 15 - rinkx < -5)
+	{
+	  p->vx = -0.8;
+	}
+      else if(jiki.x + 15 - rinkx > 5)
+	{
+	  p->vx = +0.8;
+	}
+      else p->vx = 0;
+      rinkx = p->x;
+      rinky = p->y;
+    }
+  if((p->dt1 > 60) && (p->dt1 <= 70))
+    {
+      if(p->dt1 % 2 == 1)
+	{
+	  Puttama(0, rinkx - 16, rinky);
+	  Puttama(0, rinkx, rinky);
+	  Puttama(0, rinkx + 16, rinky);
+	}
+    }
+  if((p->dt1 > 180) && (p->dt1 <= 240))
+    {
+      if(p->dt1 % 2 == 1)
+	{
+	  rinkf2 = 1;
+	  Puttama(2, rinkx - 16, p->y - 32);
+	  Puttama(3, rinkx + 32 - 16, p->y - 32);
+	}
+      else
+	{
+	  rinkf2 = 2;
+	}
+    }
+  if(p->dt1 > 240)
+    {
+      rinkf2 = 2;
+    }
+  if((p->dt1 > 240) && (p->dt1 <= 400))
+    {
+      count++;
+      PutSprite(count, rinkx - 16, rinky + 32,
+		58 + p->dt1 % 4);
+    }
+  if((p->dt1 > 300) && (p->dt1 <= 400))
+    {
+      rinkf2 = 3;
+      if(jiki.x + 15 - rinkx < -5)
+	{
+	  p->vx = -1;
+	}
+      else if(jiki.x + 15 - rinkx > 5)
+	{
+	  p->vx = +1;
+	}
+      else p->vx = 0;
+      p->x += p->vx;
+      rinkx = p->x;
+      rinky = p->y;
+      Puttama(4, rinkx - 8, rinky + 16);
+    }
+  if((p->dt1 > 400) && (p->dt1 <= 500))
+    {
+      rinkf2 = 4;
+      if(jiki.x + 15 - rinkx > 5)
+	{
+	  p->vx = -1;
+	}
+      else if(jiki.x + 15 - rinkx > 5)
+	{
+	  p->vx = +1;
+	}
+      else p->vx = 0;
+      p->x += p->vx;
+      rinkx = p->x;
+      rinky = p->y;
+    }
+  if(p->dt1 > 500)
+    {
+      rinkf2 = 5;
+      if(jiki.x + 15 - rinkx < -5)
+	{
+	  p->vx = -1;
+	}
+      else if(jiki.x + 15 - rinkx > 5)
+	{
+	  p->vx = +1;
+	}
+      else p->vx = 0;
+      p->x += p->vx;
+      rinkx = p->x;
+      rinky = p->y;
+    }
+  if(p->dt1 > 600)
+    {
+      rinkf2 = 0;
+      p->dt1 = 0;
+    }
+  fastebos++;
+  p->dt1++;
+  count++;
+  DefSpriteEx(54, 16, 32);
+  PutSpriteEx(54, p->x, p->y, 2, 2, 1);
+  return p;
+}
+
+
+CHARACTER * chara_state13(CHARACTER *p)
+{
+  if(tekino0->f == FALSE){
+    Bom(p->x, p->y);
+    p->f = FALSE;
+    p->state = delete_chara;
+    p->collision = noaction;
+    return p;
+  }
+
+  p->x += rinkx - p->dt1;
+  p->y += rinky - p->dt2;
+  p->dt1 = rinkx;
+  p->dt2 = rinky;
+  if(rinkf2 == 1)
+    {
+      if(p->x > rinkx)
+	{
+	  Puttama(2, p->x + 32, p->y);
+	}
+      if(p->x < rinkx)
+	{
+	  Puttama(3, p->x, p->y);
+	}
+    }
+  if(rinkf2 == 4)
+    {
+      count++;
+      PutSprite(count, p->x, p->y + 56, 58+filpcount % 4);
+    }
+  if(rinkf2 == 5)
+    {
+      if(p->x > rinkx)
+	{
+	  Puttama(5, p->x + 8, p->y + 24);
+	}
+      if(p->x < rinkx)
+	{
+	  Puttama(5, p->x + 8, p->y + 24);
+	}
+    }
+  return p;
+}
+
+
+CHARACTER * chara_state20(CHARACTER *p)
+{
+  p->x += p->vx;
+  p->y += p->vy;
+  p->vy -= 0.5;
+  p->vy += 0.4;
+  return p;
+}
+
+CHARACTER * chara_state21(CHARACTER *p)
+{
+  p->x += p->vx;
+  p->y += p->vy;
+  p->vx += 0.5;
+  p->vy += 0.4;
+  return p;
+}
+
+//ここまでgetate boss
+
+
+CHARACTER * chara_state22(CHARACTER *p)
+{
+  sf = rand() % 4;
+  if((sf == 0) || (sf == 1))
+    {
+      p->x = -35;
+      p->y = rand() % (120 - 35);
+      p->vx = (rand() % 4 + 1);
+      p->vy = rand() % 3 + 1;
+      p->state = chara_state23;
+    }
+  if((sf == 2))
+    {
+      p->x = rand() % 290;
+      p->y = -30;
+      p->vx = rand() % 3 - 1;
+      p->vy = (rand() % 4 + 1);
+      p->state = chara_state23;
+    }
+  if(sf == 3)
+    {
+      p->x = 320;
+      p->y = rand() % (120 - 35);
+      p->vx = (rand() % 4 + 1) * -1;
+      p->vy = rand() % 3 -1;
+      p->state = chara_state23;
+    }
+  return p;
+}
+	  
+CHARACTER * chara_state23(CHARACTER *p)
+{
+  p=asteroid(p);
+  return p;
+}
+
+CHARACTER * chara_state24(CHARACTER *p)
+{
+  kyeenemyno = p;
+  tekino0 = 0;
+  enemy_part1 = p->next;
+  enemy_part2 = enemy_part1->next;
+  enemy_part3 = enemy_part2->next;
+  enemy_part4 = enemy_part3->next;
+  enemy_part5 = enemy_part4->next;
+  rinkx = 0;
+  rinky = 0;
+  rinkf1 = 0;
+  rinkf2 = 0;
+  p->state = chara_state25;
+  return p;
+}
+
+CHARACTER * chara_state25(CHARACTER *p)
+{
+  if(p->dt1 <= 360)
+    {
+      p->x = Mycos(p->dt1) * 30 / SANKAKU + 82 + 32;
+      p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
+    }
+  if(p->dt1 > 360)
+    {
+      p->x = Mycos(p->dt1) * 30 * -1 /SANKAKU + 142 + 32;
+      p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
+    }
+  count++;
+  PutSprite(count, p->x - 42, p->y, 64);
+  amari = rand() % 160;
+  if((amari == 1) && (enemy_part5->f == TRUE))
+    {
+      p->state = chara_state26;
+      rinkf1 = 1;
+    }
+  if((amari == 2) && (enemy_part1->f == TRUE))
+    {
+      p->state = chara_state27;
+      rinkf1 = 5;
+      rinkx = 0;
+      return p;
+    }
+  if((enemy_part5->f == TRUE) && (enemy_part1->f != TRUE))
+    {
+      p->state = chara_state28;
+    }
+  p->dt1 += 3;
+  if(p->dt1 == 720)
+    {
+      p->dt1 = 0;
+    }
+  return p;
+}
+
+CHARACTER * chara_state26(CHARACTER *p)
+{
+  if((p->dt2 > 50) && (p->dt2 < 100))
+    {
+      rinkf1 = 2;
+    }
+  if(p->dt2 > 100)
+    {
+      rinkf1 = 3;
+    }
+  if(p->dt2 == 400)
+    {
+      rinkf1 = 4;
+    }
+  count++;
+  PutSprite(count, p->x - 42, p->y, 64);
+  if(p->dt2 == 401)
+    {
+      p->dt2 = 0;
+      rinkf1 = 0;
+      p->state = chara_state25;
+      return p;
+    }
+  p->dt2++;
+  return p;
+}
+
+CHARACTER * chara_state27(CHARACTER *p) //rocket punch
+{
+  if((p->dt2 > 50) && (p->dt2 < 60) && (p->x > -24) && (p->y > -24))
+    {
+      rinkf1 = 6;
+      rinkx -= 4;
+      p->x -= 4;
+      p->y -= 4;
+    }
+  if(p->dt2 == 80)
+    {
+      rinkf1 = 7;
+    }
+  if(p->dt2 == 81)
+    {
+      rinkf1 = 8;
+    }
+  if(p->dt2 == 124)
+    {
+      rinkf1 = 9;
+    }
+  if(p->dt2 == 400)
+    {
+      rinkf1 = 10;
+    }
+  if(p->dt2 == 444)
+    {
+      rinkf1 = 11;
+    }
+  if(p->dt2 == 500)
+    {
+      rinkf1 = 12;
+    }
+  if((p->dt2 > 80) && (p->dt2 < 200))
+    {
+      if((rinkx != 0) && (p->dt2 % 2 == 1))
+	{
+	  rinkx++;
+	  p->x++;
+	  p->y++;
+	}
+    }
+  count++;
+  PutSprite(count, p->x - 32, p->y, 6);
+  if(rinkf1 == 12)
+    {
+      p->dt2 = 0;
+      rinkf1 = 0;
+      rinkx = 0;
+      p->state = chara_state25;
+      return p;
+    }
+  p->dt2++;
+  return p;
+}
+CHARACTER * chara_state28(CHARACTER *p)
+{
+  if (p->dt1 <= 360)
+    {
+      p->x = Mycos(p->dt1) * 30 / SANKAKU + 82 + 32;
+      p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
+    }
+  if (p->dt1 > 360)
+    {
+      p->x = Mycos(p->dt1) * 30 * -1 / SANKAKU + 142 + 32;
+      p->y = Mysin(p->dt1) * 30 / SANKAKU + 30;
+    }
+  count++;
+  PutSprite(count, p->x - 42, p->y, 64);
+  if (p->dt1 % 30 == 3)
+    {
+      Putenemy(24, p->x + 14,
+	       p->y + 14,
+	       (rand() % 5 + 0.5) * (rand() % 2 ==
+				     1 ? -1 : 1),
+	       (rand() % 5 + 0.5) * (rand() % 2 ==
+				     1 ? -1 : 1), chara_state29);
+    }
+  p->dt1 += 3;
+  return p;
+}
+
+
+CHARACTER * chara_state29(CHARACTER *p)
+{
+  p->x += p->vx;
+  p->y += p->vy;
+  if(p->dt1 % 18 == 1)
+    {
+      Puttama(0, p->x, p->y);
+    }
+  p->dt1++;
+  return p;
+}
+
+
+CHARACTER * chara_state30(CHARACTER *p)
+{
+  p->x = p->x - 32;
+  p->y = p->y;
+  return p;
+}
+
+CHARACTER * chara_state31(CHARACTER *p) //right hand
+{
+  
+  if((enemy_part3->f == FALSE) || (kyeenemyno->f == FALSE))
+    {
+      Bom(p->x, p->y);
+      p->f = FALSE;
+      p->state = delete_chara;
+      p->collision = noaction;
+      return p;
+    }
+
+  if(rinkf1 == 0)
+    {
+      p->x = kyeenemyno->x + 40;
+      p->y = kyeenemyno->y + 28;
+      p->dt2 = 0;
+    }
+  if(rinkf1 == 5)
+    {
+      p->x = kyeenemyno->x + 52;
+      p->y = kyeenemyno->y;
+      count++;
+      PutSprite(count, p->x - 4, p->y - 20, 80 + p->dt2 % 4);
+      p->dt2++;
+    }
+  if(rinkf1 == 6)
+    {
+      if(p->y < 240 - 40)
+	{
+	  p->y += 6;
+	}
+      else 
+	{
+	  return p;
+	}
+      count++;
+      PutSprite(count, p->x - 4, p->y - 20, 90 + p->dt2 % 4);
+      p->dt2++;
+    }
+  if(rinkf1 == 7)
+    {
+      Putenemy(22, p->x + 14, p->y + 14, 0, 0, chara_state40);
+      return p;
+    }
+  if(rinkf1 == 11)
+    {
+      if(p->y + 20 != p->y)
+	{
+	  p->y--;
+	}
+      else 
+	{
+	  return p;
+	}
+      count++;
+      PutSprite(count, p->x + 8, p->y + 44, 58 + p->dt2 % 4);
+      p->dt2++;
+    }
+  return p;
+}
+
+
+CHARACTER * chara_state32(CHARACTER *p) //left hand
+{
+  if ((enemy_part4->f == FALSE)
+      || (kyeenemyno->f == FALSE))
+    {
+      Bom(p->x, p->y);
+      p->f = FALSE;
+      p->state = delete_chara;
+      p->collision = noaction;
+      return p;
+    }
+  p->x = kyeenemyno->x - 40;
+  p->y = kyeenemyno->y + 28;
+  if (rinkf1 == 5)
+    {
+      p->x = kyeenemyno->x - 24 + 4;
+      p->y = kyeenemyno->y + 28;
+      p->charano = enemystate[20].charano;
+    }
+  if (rinkf1 == 11)
+    {
+      p->charano = enemystate[14].charano;
+    }
+  if (rinkf1 == 7)
+    {
+      Putenemy(23, p->x + 14,
+	       p->y + 14, 0, 0, chara_state41);
+      //      rinkf1=8;
+      return p;
+    }
+  return p;
+}
+
+
+CHARACTER * chara_state33(CHARACTER *p) // right shoulder
+{
+  if (kyeenemyno->f == FALSE)
+    {
+      Bom(p->x, p->y);
+      p->f = FALSE;
+      p->state = delete_chara;
+      p->collision = noaction;
+      return p;
+    }
+  p->x = kyeenemyno->x + 32;
+  p->y = kyeenemyno->y;
+  if (rinkf1 == 5)
+    {
+      p->x = kyeenemyno->x + 32 - 4;
+      p->y = kyeenemyno->y;
+      p->charano = enemystate[19].charano;
+    }
+  if (rinkf1 == 6)
+    {
+      p->charano = enemystate[11].charano;
+    }
+  return p;
+}
+
+
+CHARACTER * chara_state34(CHARACTER *p) //left shoulder
+{
+  if (kyeenemyno->f == FALSE)
+    {
+      Bom(p->x, p->y);
+      p->f = FALSE;
+      p->state = delete_chara;
+      p->collision = noaction;
+      return p;
+    }
+  p->x = kyeenemyno->x - 32;
+  p->y = kyeenemyno->y;
+  if (rinkf1 == 5)
+    {
+      p->charano = enemystate[21].charano;
+    }
+  if (rinkf1 == 6)
+    {
+      p->charano = enemystate[12].charano;
+    }
+  return p;
+}
+
+CHARACTER * chara_state35(CHARACTER *p) // bust
+{
+  if (kyeenemyno->f == FALSE)
+    {
+      Bom(p->x, p->y);
+      p->f = FALSE;
+      p->state = delete_chara;
+      p->collision = noaction;
+      return p;
+    }
+  p->x = kyeenemyno->x;
+  p->y = kyeenemyno->y + 32;
+  if (rinkf1 == 1)
+    {
+      p->charano = enemystate[16].charano;
+    }
+  if (rinkf1 == 2)
+    {
+      count++;
+      PutSprite(count, p->x - 10,
+		p->y + 16,
+		58 + p->dt2 % 4);
+      count++;
+      PutSprite(count, p->x + 10,
+		p->y + 16,
+		58 + p->dt2 % 4);
+      p->dt2++;
+    }
+  if (rinkf1 == 3)
+    {
+      count++;
+      PutSprite(count, p->x - 10,
+		p->y + 16,
+		58 + p->dt2 % 4);
+      count++;
+      PutSprite(count, p->x + 10,
+		p->y + 16,
+		58 + p->dt2 % 4);
+      if (p->dt2 % 20 == 1)
+	{
+	  Puttama(7, p->x, p->y + 16);
+	  Puttama(7, p->x + 20,
+		  p->y + 16);
+	}
+    p->dt2++;
+  }
+  if (rinkf1 == 4) {
+    p->charano = enemystate[15].charano;
+    p->dt2 = 0;
+  }
+  return p;
+}
+
+
+CHARACTER * chara_state40(CHARACTER *p) //arm vulkan
+{
+  if (enemy_part1->f == FALSE)
+    {
+      Bom(p->x, p->y);
+      p->f = FALSE;
+      p->state = delete_chara;
+      p->collision = noaction;
+      return p;
+    }
+  if ((rinkf1 == 8) && (p->dt1 % 3 == 1))
+    {
+      if ((p->dt2 < 16))
+	{
+	  p->dt2++;
+	  DefSprite(76, "boss2_rightarm_b", 16, p->dt2, 480, boss);
+	}
+      else
+	{
+	  //                                  rinkf1=9;
+	  return p;
+	}
+    }
+  if (rinkf1 == 9)
+    {
+      if (p->dt1 % 15 == 1)
+	{
+	  Puttama(8, p->x, p->y);
+	}
+    }
+  if (rinkf1 == 10)
+    {
+      if (p->dt2 != 0)
+	{
+	  p->dt2--;
+	  DefSprite(76, "boss2_rightarm_b", 16, p->dt2, 480, boss);
+	}
+      else
+	{
+	  p->f = FALSE;
+	  p->state = delete_chara;
+	  p->collision = noaction;
+	  //          rinkf1=11;
+	}
+    }
+  p->dt1++;
+  return p;
+}
+
+
+CHARACTER * chara_state41(CHARACTER *p) //left arm up arm vulkan
+{
+  if (enemy_part2->f == FALSE)
+    {
+      Bom(p->x, p->y);
+      p->f = FALSE;
+      p->state = delete_chara;
+      p->collision = noaction;
+      return p;
+    }
+  p->x = kyeenemyno->x - 20 - 7;
+  p->y = kyeenemyno->y + 28 + 15;
+  if ((rinkf1 == 8) && (p->dt1 % 3 == 1))
+    {
+      if ((p->dt2 < 16))
+	{
+	  p->dt2++;
+	  DefSprite(77, "boss2_leftarmbattery", p->dt2, 16, 480, boss);	/*左腕アップアーム砲 */
+	}
+      else
+	{
+	  rinkf1 = 9;
+	  return p;
+	}
+    }
+  if (rinkf1 == 9)
+    {
+      if (p->dt1 % 15 == 1) 
+	{
+	  Puttama(9 + rand() % 2, p->x, p->y);
+	}
+    }
+  if (rinkf1 == 10)
+    {
+      if (p->dt2 != 0)
+	{
+	  p->dt2--;
+	  DefSprite(77, "boss2_leftarmbattery", p->dt2, 16, 480, boss);
+	}
+      else
+	{
+	  p->f = FALSE;
+	  p->state = delete_chara;
+	  p->collision = noaction;
+	  return p;
+	  //          rinkf1=11;
+	}
+    }
+  p->dt1++;
+  return p;
+}
+
+
+CHARACTER * chara_state400(CHARACTER *p)
+{
+  p->vy++;
+  p->y += p->vy / 4;
+  p->state = chara_state400;
+  return p;
+}
+
+
+CHARACTER * chara_state401(CHARACTER *p)
+{
+  p->vx++;
+  p->x += p->vx / 8;
+  if (p->x > (jiki.x - 32))
+    {
+      p->vy--;
+    }
+  p->y += p->vy / 8;
+  if (p->dt1 % 50 == 37)
+    {
+      Puttama(1, p->x + 8, p->y + 24);
+    }
+  p->dt1++;
+  return p;
+}
+
+
+CHARACTER * chara_state402(CHARACTER *p)
+{
+  p->vx--;
+  p->x += p->vx / 8;
+  if (p->x < (jiki.x + 32))
+    {
+      p->vy--;
+    }
+  p->y += p->vy / 8;
+  if (p->dt1 % 50 == 37)
+    {
+      Puttama(1, p->x + 8, p->y + 24);
+    }
+  p->dt1++;
+  return p;
+}
+
+
+CHARACTER * chara_state410(CHARACTER *p)
+{
+  kyeenemyno = p;
+  p->state = chara_state411;
+  return p;
+}
+
+
+CHARACTER * chara_state411(CHARACTER *p)
+{
+  if (p->dt2 > 356)
+    {
+      p->vx = -1;
+    }
+  if (p->dt2 < -398)
+    {
+      p->vx = 1;
+    }
+  if ((p->dt1) % 62 == 0)
+    Putenemy(41,
+	     p->x,
+	     p->y,
+	     (int) -Mycos(p->dt1 / 16) * 4 /
+	     SANKAKU,
+	     (int) -Mysin(p->dt1 / 16) * 4 /
+	     SANKAKU, chara_state7);
+  if ((p->dt1) % 13 == 0)
+    Puttama(11, p->x + 32,
+	    p->y + 32);
+  
+  p->dt2 += p->vx;
+  p->dt1 += p->dt2 / 4;
+  
+  p->x = jiki.x - 16 +
+    Mycos(p->dt1 / 16) * 128 / SANKAKU;
+  p->y = jiki.y - 16 +
+    Mysin(p->dt1 / 16) * 128 / SANKAKU;
+  if (p->x < 0)
+    {
+      p->x = 0;
+    }
+  if (p->x > 260)
+    {
+      p->x = 260;
+    }
+  if (p->y < 0)
+    {
+      p->y = 0;
+    }
+  if (p->y > 232)
+    {
+      p->y = 232;
+    }
+  return p;
+}
+
+
+CHARACTER * chara_state500(CHARACTER *p)
+{
+  p->s = 0;
+  
+  kyeenemyno = p;
+  p->dt2++;
+  p->dt2 %= 512;
+  p->dt1++;
+  count++;
+  DefSpriteEx(100, 16, 16);
+  //		PutSprite(count, enemy[tekino].x + 16,
+  //  enemy[tekino].y + 16, 100);
+  PutSpriteEx(100, p->x + 16, p->y + 16, 2, 2, p->dt1);
+  
+  if (p->dt1 % (5 + p->dt2 / 8) == 1) {
+    if (rand() % 2 == 1)
+      Putenemy(24, p->x, p->y,
+	       (rand() % 5 + 0.5) * (rand() % 2 ==
+				     1 ? -1 : 1),
+	       (rand() % 5 + 0.5) * (rand() % 2 ==
+				     1 ? -1 : 1), chara_state501);
+    else
+      Putenemy(rand() % 2 + 1, p->x,
+	       p->y,
+	       (int) Mycos(p->dt1 / 4) * 4 /
+	       SANKAKU,
+	       (int) -Mysin(p->dt1 / 4) * 4 /
+	       SANKAKU, chara_state501);
+  }
+  if (p->dt1 == 50) {
+    /*Putenemy(44,0,0,1,1,411); */
+  }
+  return p;
+}
+
+
+CHARACTER * chara_state501(CHARACTER *p)
+{
+  p->x += p->vx;
+  p->y += p->vy;
+  if(p->dt1 % 32 == 1)
+    {
+      Puttama(11, p->x, p->y);
+    }
+  p->dt1++;
+  return p;
+}
+
+
+CHARACTER * chara_state600(CHARACTER *p)
+{
+  kyeenemyno = p;
+  p->dt1 += 30;
+  p->dt2++;
+  p->dt1 %= 360;
+  p->x += Mycos(p->dt1) * 4 / SANKAKU;
+  p->y += Mysin(p->dt1) * 4 / SANKAKU;
+  Puttama(11, p->x + 16, p->y + 16);
+  Puttama(11, p->x + 32, p->y + 48);
+  Puttama(11, p->x + 48, p->y + 16);
+  if (p->dt2 > 240)
+    p->state = chara_state601;
+  if (p->x < 0)
+    p->x = 0;
+  if (p->x > 260)
+    p->x = 260;
+  if (p->y < 0)
+    p->y = 0;
+  if (p->y > 232)
+    p->y = 232;
+  return p;
+}
+
+
+CHARACTER * chara_state601(CHARACTER *p)
+{
+  p->dt2++;
+  if (p->x < jiki.x)
+    p->vx++;
+  if (p->x > jiki.x)
+    p->vx--;
+  p->x += p->vx;
+  Putenemy(6, p->x + 16 + rand() % 32,
+	   p->y, 0, rand() % 4, chara_state400);
+  if (p->x < 0)
+    p->x = 0;
+  if (p->x > 260)
+    p->x = 260;
+  if (p->y < 0)
+    p->y = 0;
+  if (p->y > 232)
+    p->y = 232;
+  if (p->dt2 > 800) {
+    p->state = chara_state602;
+  }
+  return p;
+}
+
+
+CHARACTER * chara_state602(CHARACTER *p)
+{
+  p->dt2++;
+  Putenemy(24, p->x + 14, p->y + 14,
+	   (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
+	   (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
+	   chara_state29);
+  if (p->dt2 > 1024) {
+    p->state = chara_state600;
+    p->dt2 = 0;
+  }
+  return p;
+}
+
+
+CHARACTER *  asteroid(CHARACTER *p)
+{
+    int i;
+
+    asteroiddt[asteroidi] = p;
+    //            if(asteroidi==0)
+    //            {
+    p->x += p->vx;
+    p->y += p->vy;
+    //            }
+    if (asteroidi > 0) {
+	for (i = 0; i < asteroidi; i++) {
+	    if ((asteroiddt[i]->x + 32 > p->x)
+		&& (p->x + 32 > asteroiddt[i]->x)
+		&& (asteroiddt[i]->y + 32 > p->y)
+		&& (asteroiddt[i]->y < p->y + 32)) {
+		p->vx *= -1;
+		p->vy *= -1;
+	    }
+	}
+    }
+    asteroidi++;
+    return p;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Character_state.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,49 @@
+
+CHARACTER * noaction(CHARACTER *p);
+CHARACTER * chara_state0(CHARACTER *p);
+CHARACTER * chara_state1(CHARACTER *p);
+CHARACTER * chara_state2(CHARACTER *p);
+CHARACTER * chara_state3(CHARACTER *p);
+CHARACTER * chara_state4(CHARACTER *p);
+CHARACTER * chara_state5(CHARACTER *p);
+CHARACTER * chara_state6(CHARACTER *p);
+CHARACTER * chara_state7(CHARACTER *p);
+CHARACTER * chara_state8(CHARACTER *p);
+CHARACTER * chara_state9(CHARACTER *p);
+CHARACTER * chara_state10(CHARACTER *p);
+CHARACTER * chara_state11(CHARACTER *p);
+CHARACTER * chara_state12(CHARACTER *p);
+CHARACTER * chara_state13(CHARACTER *p);
+CHARACTER * chara_state20(CHARACTER *p);
+CHARACTER * chara_state21(CHARACTER *p);
+CHARACTER * chara_state22(CHARACTER *p);
+CHARACTER * chara_state23(CHARACTER *p);
+CHARACTER * chara_state24(CHARACTER *p);
+CHARACTER * chara_state25(CHARACTER *p);
+CHARACTER * chara_state26(CHARACTER *p);
+CHARACTER * chara_state27(CHARACTER *p);
+CHARACTER * chara_state28(CHARACTER *p);
+CHARACTER * chara_state29(CHARACTER *p);
+CHARACTER * chara_state30(CHARACTER *p);
+CHARACTER * chara_state31(CHARACTER *p);
+CHARACTER * chara_state32(CHARACTER *p);
+CHARACTER * chara_state33(CHARACTER *p);
+CHARACTER * chara_state34(CHARACTER *p);
+CHARACTER * chara_state35(CHARACTER *p);
+CHARACTER * chara_state40(CHARACTER *p);
+CHARACTER * chara_state41(CHARACTER *p);
+CHARACTER * chara_state400(CHARACTER *p);
+CHARACTER * chara_state401(CHARACTER *p);
+CHARACTER * chara_state402(CHARACTER *p);
+CHARACTER * chara_state410(CHARACTER *p);
+CHARACTER * chara_state411(CHARACTER *p);
+CHARACTER * chara_state500(CHARACTER *p);
+CHARACTER * chara_state501(CHARACTER *p);
+CHARACTER * chara_state600(CHARACTER *p);
+CHARACTER * chara_state601(CHARACTER *p);
+CHARACTER * chara_state602(CHARACTER *p);
+CHARACTER * asteroid(CHARACTER *p);
+
+extern int enemyfaste;
+extern int fastebos;
+extern int asteroidi;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Enemy.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,64 @@
+#include "Enemy.h"
+#include"syokika.h"
+
+int filpcount = 0;
+int stage = 0;
+
+teki enemy[300];
+teki *e;
+BOOL tf = FALSE;
+
+#define ENEMY_STATUS(id,charno,score,hardness) {charno,score,hardness}
+const state enemystate[] = ENEMY_STATUS_TABLE;
+
+void TFon()
+{
+    tf = TRUE;
+}
+
+void TFoff()
+{
+    tf = FALSE;
+}
+
+void Putenemy(int charno, float x, float y, float sx, float sy, int move)
+{
+    int ii = 0;
+    e = &enemy[0];
+    while ((e->f) == TRUE) {
+	ii++;
+	if (ii == 100)
+	    return;
+	e++;
+    }
+    e->x = x;
+    e->y = y;
+    e->sx = sx;
+    e->sy = sy;
+    e->charno = enemystate[charno].charno;
+    e->f = TRUE;
+    e->p = enemystate[charno].p;
+    e->move = move;
+    e->sc = enemystate[charno].sc;
+    e->dt1 = e->dt2 = 0;
+    e->tama = tf;
+}
+
+void
+Putenemyb(int b, int charno, float x, float y, float sx, float sy,
+	  int move)
+{
+    //int ii=0;
+    e = &enemy[b];
+    e->x = x;
+    e->y = y;
+    e->sx = sx;
+    e->sy = sy;
+    e->charno = enemystate[charno].charno;
+    e->f = TRUE;
+    e->p = enemystate[charno].p;
+    e->move = move;
+    e->sc = enemystate[charno].sc;
+    e->dt1 = e->dt2 = 0;
+    e->tama = tf;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Enemy.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,106 @@
+#include "bool.h"
+
+#ifndef _ENEMY_H_
+#define _ENEMY_H_
+
+typedef struct enemy_status {
+    int charno;			// sprite image number
+    int sc;			// score
+    int p;			// hardness
+} state;
+
+typedef struct teki {
+    float x;
+    float y;
+    float sx;
+    float sy;
+    int charno;
+    BOOL tama;			/*たま */
+    BOOL f;			/*表示フラグ */
+    int p;			/*かたさです */
+    int move;
+    int sc;			/*スコア */
+    int dt1;
+    int dt2;
+  float s;
+} teki;
+
+
+// prote type 
+extern void Puttama(int type, float x, float y);
+extern void Defenemy(int no, int charno, int sc, int p);
+extern void TFon();
+extern void TFoff();
+extern void Putenemy(int charno, float x, float y, float sx, float sy,
+		     int move);
+extern void Putenemyb(int b, int charno, float x, float y, float sx,
+		      float sy, int move);
+extern void En0();
+
+
+extern int filpcount;
+extern int stage;
+extern teki enemy[300];
+extern const state enemystate[50];
+
+/**
+ * enemyの種類一覧
+ */
+#define ENEMY_STATUS_TABLE {\
+      ENEMY_STATUS(UNUSED0,			0, 0, 0),\
+      ENEMY_STATUS(ID_GREENCRAB,		ENEMY_GREENCRAB,	330, 98),\
+      ENEMY_STATUS(ID_PLANE,			ENEMY_PLANE,		470, 37),\
+      ENEMY_STATUS(ID_REDBULLET,		ENEMY_REDBULLET,	30, 16),\
+      ENEMY_STATUS(ID_BOSS1ORGAN,		BOSS1_ORGAN,		25000, 10000),\
+      ENEMY_STATUS(ID_BOSS1SIDEPARTS,		BOSS1_ORGAN,		10000, 10000),\
+      ENEMY_STATUS(ID_BLUEBULLET,		ENEMY_BLUEBULLET,	40, 39),\
+      ENEMY_STATUS(ID_LASER,			ENEMY_LASER,		100, 100000),\
+      ENEMY_STATUS(ID_LIGHTNING,		ENEMY_LIGHTNING,	100, 100000),\
+      ENEMY_STATUS(ID_ASTEROID,			ASTEROID,		170, 500),\
+      ENEMY_STATUS(ID_ASTEROIDID_BOSS2BODY,	BOSS2_BODY,		100, 500),\
+      ENEMY_STATUS(ID_BOSS2LEFTSHOULDER,	BOSS2_LEFTSHOULDER,	10000, 12000),\
+      ENEMY_STATUS(ID_BOSS2RIGHTSHOULDER,	BOSS2_RIGHTSHOULDER,	10000, 12000),\
+      ENEMY_STATUS(ID_BOSS2RIGHTARM,		BOSS2_RIGHTARM,		5000, 15000),\
+      ENEMY_STATUS(ID_BOSS2LEFTARM,		BOSS2_LEFTARM,		5000, 15000),\
+      ENEMY_STATUS(ID_BOSS2BATTERY,		BOSS2_BATTERY,		10000, 5000),\
+      ENEMY_STATUS(ID_BOSS2OPENBATTERY,		BOSS2_OPENBATTERY,	10000, 5000),\
+      ENEMY_STATUS(ID_BOSS2BROKENHATCH,		BOSS2_BROKENHATCH,	100, 500),\
+      ENEMY_STATUS(ID_BOSS2DUMMY,		BOSS2_DUMMY,		50000, 15000),\
+      ENEMY_STATUS(ID_BOSS2RIGHTSHOULDERUP,	BOSS2_RIGHTSHOULDERUP,	10000, 20000),\
+      ENEMY_STATUS(ID_BOSS2LEFTSHOULDERUP,	BOSS2_LEFTSHOULDERUP,	10000, 15000),\
+      ENEMY_STATUS(ID_BOSS2LEFTSHOULDERGIRD,	BOSS2_LEFTSHOULDERGIRD,	100, 20000),\
+      ENEMY_STATUS(ID_BOSS2RIGHTARMBATTERY,	BOSS2_RIGHTARMBATTERY,	100, 500),\
+      ENEMY_STATUS(ID_BOSS2LEFTARMBATTERY,	BOSS2_LEFTARMBATTERY,	100, 500),\
+      ENEMY_STATUS(ID_ORBIT,			ORBITMACHINE,		20, 1000000),\
+      ENEMY_STATUS(UNUSED1,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED2,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED3,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED4,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED5,			0, 0, 0),\
+      ENEMY_STATUS(ID_BLACK_HOLE,		BLACKHOLE,		200000, 30000),\
+      ENEMY_STATUS(UNUSED6,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED7,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED8,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED9,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED10,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED11,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED12,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED13,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED14,			0, 0, 0),\
+      ENEMY_STATUS(ID_GUN_BATTERY,		GUNBATTERY,		540, 137),\
+      ENEMY_STATUS(ID_PURPLE_CORE,		PURPLECORE,		840, 287),\
+      ENEMY_STATUS(ID_SPACE_FISH,		SPACEFISH,		370, 137),\
+      ENEMY_STATUS(ID_AUTOMISSILE,		MISSILE,		210, 24),\
+      ENEMY_STATUS(ID_BOSS3,			BOSS3_BODY,		100000, 9600),\
+      ENEMY_STATUS(UNUSED15,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED16,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED17,			0, 0, 0),\
+      ENEMY_STATUS(UNUSED18,			0, 0, 0),\
+      ENEMY_STATUS(ID_BOSS4,			BODD4_BODY,		300000, 20400)\
+}
+
+#define ENEMY_STATUS(id,charno,score,hardness) id
+typedef enum ENEMY_STATUS EnemyId;
+#undef ENEMY_STATUS
+
+#endif				// _ENEMY_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LoadSprite.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <time.h>
+#include <SDL.h>
+#include "SDL_opengl.h"
+#include "SDL_image.h"
+#include "object.h"
+#include "xml.h"
+#include "tree_controll.h"
+#include "LoadSprite.h"
+
+//#define bmp_file "./s-dandy.bmp"
+
+SDL_Surface *LoadSprite(SURFACE *surfaces)
+{
+  SDL_Surface *image;
+  SDL_Surface *temp;
+  
+  /* Load the sprite image */
+  image = IMG_Load(surfaces->image_name);
+  
+  if ( image == NULL ) {
+    fprintf(stderr, "Couldn't load %s: %s", surfaces->image_name, SDL_GetError());
+    printf("can't not load image_file\n");
+    return NULL;
+  }
+  
+  /* Set transparent pixel as the pixel at (0,0) */
+  /* if ( image->format->palette ) {
+    SDL_SetColorKey(image, (SDL_SRCCOLORKEY|SDL_RLEACCEL), *(Uint8 *)image->pixels);
+    }*/
+  SDL_SetColorKey(image, (SDL_SRCCOLORKEY|SDL_RLEACCEL), SDL_MapRGB(image->format, 0, 0, 0));
+  
+  /* Convert sprite to video format */
+  temp = SDL_DisplayFormat(image);
+  SDL_FreeSurface(image);
+  if ( temp == NULL ) {
+    fprintf(stderr, "Couldn't convert background: %s\n", SDL_GetError());
+    return NULL;
+  }
+  image = temp;
+  return image;
+
+  /* We're ready to roll. */
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LoadSprite.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,2 @@
+SDL_Surface *LoadSprite(SURFACE *surfaces);
+SDL_Surface *sprite;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,26 @@
+# Makefile to build the SDL tests
+
+srcdir  = .
+ABI = -m32
+
+CC      = gcc
+CFLAGS  = -g $(ABI) -O2 -Wall `sdl-config --cflags` `xml2-config --cflags`
+LIBS	=  `sdl-config --libs`,-framework,OpenGL -lSDL_mixer -lSDL_image `xml2-config --libs`
+TARGET = demo
+OBJS    = sankaku.o sgoex.o Character.o Bom.o tokuten.o collision.o count2.o Character_state.o schedule3.o tama2.o syokika.o Ss.o sound.o main.o profile.o debug.o trace.o LoadSprite.o xml.o b64_de.o tree_controll.o object.o sys.o #back.o 
+
+all: $(TARGET)
+
+test: $(TARGET)
+	./$(TARGET) -test
+
+$(TARGET): $(OBJS)
+	$(CC) $(ABI) -o $@ $(OBJS) $(LIBS)
+
+clean:
+	rm -f $(TARGET) $(OBJS)
+
+.c.o:
+	$(CC) $(CFLAGS) $(INCLUDES) -c $<
+
+debug.o:debug.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.demo	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,25 @@
+# Makefile to build the SDL tests
+
+srcdir  = .
+
+CC      = gcc
+CFLAGS  = -g -O2 -Wall `sdl-config --cflags` `xml2-config --cflags`
+LIBS	=  `sdl-config --libs`,-framework,OpenGL -lSDL_mixer -lSDL_image `xml2-config --libs`
+TARGET = demo
+OBJS    = sankaku.o sgoex.o Character.o Bom.o tokuten.o collision.o count2.o Character_state.o schedule3.o tama2.o syokika.o Ss.o sound.o main.o profile.o debug.o trace.o LoadSprite.o xml.o b64_de.o tree_controll.o object.o sys.o #back.o 
+
+all: $(TARGET)
+
+test: $(TARGET)
+	./$(TARGET) -test
+
+$(TARGET): $(OBJS)
+	$(CC) -o $@ $(OBJS) $(LIBS)
+
+clean:
+	rm -f $(TARGET) $(OBJS)
+
+.c.o:
+	$(CC) $(CFLAGS) $(INCLUDES) -c $<
+
+debug.o:debug.h
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.mac	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,25 @@
+# Makefile to build the SDL tests
+
+srcdir  = .
+
+CC      = gcc
+CFLAGS  = -g -m32 -O2 -Wall `sdl-config --cflags`
+LIBS	=  `sdl-config --libs`,-framework,OpenGL -lSDL_mixer
+TARGET = my_dandy
+OBJS    = sankaku.o sgoex.o Enemy.o bom.o tokuten.o atari.o count2.o move.o schedule.o tama.o syokika.o Ss.o sound.o main.o profile.o debug.o trace.o LoadSprite.o #back.o
+
+all: $(TARGET)
+
+test: $(TARGET)
+	./$(TARGET) -test
+
+$(TARGET): $(OBJS)
+	$(CC) -o $@ $(OBJS) $(LIBS)
+
+clean:
+	rm -f $(TARGET) $(OBJS)
+
+.c.o:
+	$(CC) $(CFLAGS) $(INCLUDES) -c $<
+
+debug.o:debug.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.ps3	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,29 @@
+# Makefile to build the SDL tests
+
+srcdir  = .
+
+CC      = gcc
+CFLAGS  = -g -O2 -Wall `sdl-config --cflags` `xml2-config --cflags`
+LIBS	=  `sdl-config --libs` -lGL -lGLU -lSDL_mixer -lSDL_image `xml2-config --libs`
+TARGET = demo
+OBJS    = sankaku.o sgoex.o Character.o Bom.o tokuten.o collision.o count2.o Character_state.o schedule3.o tama2.o syokika.o Ss.o sound.o main.o profile.o debug.o trace.o LoadSprite.o xml.o b64_de.o tree_controll.o object.o sys.o #back.o 
+
+all: $(TARGET)
+
+test: $(TARGET)
+	./$(TARGET) -test
+
+$(TARGET): $(OBJS)
+	$(CC) -o $@ $(OBJS) $(LIBS)
+
+clean:
+	rm -f $(TARGET) $(OBJS)
+
+.c.o:
+	$(CC) $(CFLAGS) $(INCLUDES) -c $<
+
+debug.o:debug.h
+
+depend:
+	makedepend -- $(CFLAGS) -- $(OBJS:.o=.c)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Ss.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,125 @@
+/*
+ *    Ss is an omission which means Sound Synthesizer. But, this version, for PS2,
+ *    isn't implemented the realities. We think that the Sc module can be implemented 
+ *    with SDLaudio-library-for-PS2.
+ */
+
+//#include "libps.h"
+#include <SDL.h>
+
+
+int SsUtKeyOn(int vabId, int prog, int tone, int note, int fine, int voll, int vlor)
+{
+    return 0;
+}
+
+
+int SsUtKeyOff(int voice, int vabId, int prog, int tone, int note)
+{
+    return 0;
+}
+
+
+void SsSetSerialAttr(char s_num, char attr, char mode)
+{
+}
+
+
+void SsSetSerialVol(char a, int b, int c)
+{
+}
+
+
+int SsUtSetReverbType(int type)
+{
+    return type;
+}
+
+
+
+void SsSetMVol(int voll, int volr)
+{
+}
+
+
+
+
+
+void SsUtReverbOn(void)
+{
+}
+
+
+
+#if 0
+int VSync(int mode)
+{
+    return 59;
+}
+#endif
+
+
+
+int SsVabTransfer(unsigned char *vh_addr, unsigned char *vd_addr,
+		  int vabid, int i_flag)
+{
+    return vabid;
+}
+
+
+
+int SsSeqOpen(unsigned int *addr, int vad_id)
+{
+    return 1;
+}
+
+
+
+void SsSeqPlay(int seq_access_num, char play_mode, int count)
+{
+}
+
+
+
+void SsSeqStop(int seq_access_num)
+{
+}
+
+
+
+void SsSeqClose(int seq_access_num)
+{
+}
+
+/*
+int CdReadFile(char *file, u_int * addr, int nbyte)
+{
+    return 0;
+}
+
+
+int CdReadSync(int mode, u_char * result)
+{
+    return 0;
+}
+
+
+CdlFILE *CdSearchFile(CdlFILE * fp, char *name)
+{
+    return 0;
+}
+*/
+
+void SsSetTempo(int a, int b, int c)
+{
+}
+
+
+void GetPadBuf(volatile unsigned char **a, volatile unsigned char **b)
+{
+}
+
+
+void SsUtSetReverbDepth(int a, int b)
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Ss.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,15 @@
+extern int SsUtKeyOn(int vabId, int prog, int tone, int note, int fine, int voll, int vlor);
+extern int SsUtKeyOff(int voice, int vabId, int prog, int tone, int note);
+extern void SsSetSerialAttr(char s_num, char attr, char mode);
+extern void SsSetSerialVol(char a, int b, int c);
+extern int SsUtSetReverbType(int type);
+extern void SsSetMVol(int voll, int volr);
+extern void SsUtReverbOn(void);
+extern int SsVabTransfer(unsigned char *vh_addr, unsigned char *vd_addr, int vabid, int i_flag);
+extern int SsSeqOpen(unsigned int *addr, int vad_id);
+extern void SsSeqPlay(int seq_access_num, char play_mode, int count);
+extern void SsSeqStop(int seq_access_num);
+extern void SsSeqClose(int seq_access_num);
+extern void SsSetTempo(int a, int b, int c);
+extern void GetPadBuf(volatile unsigned char **a, volatile unsigned char **b);
+extern void SsUtSetReverbDepth(int a, int b);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/atari.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,205 @@
+#include <SDL.h>
+#include "atari.h"
+#include "bom.h"
+#include "count2.h"
+#include "sound.h"
+#include "Enemy.h"
+//#include "libps.h"
+
+//#include<libps.h>
+#include "SDL_image.h"
+//#include "libps2.h"
+#include "SDL_opengl.h"
+//#include "texture.h"
+#include "object.h"
+//#include "tree_controll.h"
+#include "sgoex.h"
+//#include "trace.h"
+//#include "syokika.h"
+//#include "LoadSprite.h"
+
+
+extern SpriteTable sptable[DEFOBJ];
+
+
+int atari(int playerno, int enemyno)
+{
+    int i1, i2, h, w, ex, ey, charno;
+    int n;
+    ex = enemy[enemyno].x;
+    ey = enemy[enemyno].y;
+    charno = enemy[enemyno].charno;
+    w = sptable[charno].w;
+    h = sptable[charno].h;
+    i2 = playerno;
+
+
+    //自機やられ
+#ifndef INVISIBLE_MODE
+    if ((ex < jiki.x + 128 / 2) && (ex + w > jiki.x + 128 / 2)
+	&& (ey < jiki.y + 128 / 2) && (ey + h > jiki.y + 128 / 2)
+	&& jiki.muteki == 0) {
+      //se_voice[0] = SsUtKeyOn(vab[JIKIOUT], 0, 0, 65, 0, 60, 60);
+	Bom(jiki.x + 16, jiki.y + 16);
+	jiki.bf = FALSE;
+	jiki.zanki--;
+	jiki.muteki = 120;
+
+	infg.stg = 0;
+	infg_level--;
+	if (infg_level < 0)
+	    infg_level = 0;
+
+	return (0);
+    }
+#endif
+
+    if (enemy[enemyno].tama == TRUE)
+	goto jumping;
+    for (i1 = 0; i1 < tama_lv1_end + 1; i1++) {
+
+	if ((tama_lv1[i1].x + 64 + 64 > ex)
+	    && (ex + w > tama_lv1[i1].x + 16)
+	    && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
+	    && (tama_lv1[i1].r != -1)) {
+	    tama_lv1[i1].r = -1;
+	    enemy[enemyno].p -= TAMALV1P;
+	    infg.stg++;
+	    if (enemy[enemyno].p <= 0) {
+		infg.stg += 4;
+		return 1;
+	    }
+	}
+	if ((tama_lv1[i1].x + 64 > ex) && (ex + w > tama_lv1[i1].x)
+	    && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
+	    && (tama_lv1[i1].l != -1)) {
+	    tama_lv1[i1].l = -1;
+	    enemy[enemyno].p -= TAMALV1P;
+	    infg.stg++;
+	    if (enemy[enemyno].p <= 0) {
+		infg.stg += 4;
+		return 1;
+	    }
+	}
+    }
+
+    for (i1 = 0; i1 < tama_lv2_end + 1; i1++) {
+	if ((tama_lv2[i1].x + 128 + 64 > ex)
+	    && (ex + w > tama_lv2[i1].x + 128)
+	    && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
+	    && (tama_lv2[i1].rr != -1)) {
+	    tama_lv2[i1].rr = -1;
+	    enemy[enemyno].p -= TAMALV2P;
+	    infg.stg++;
+	    if (enemy[enemyno].p <= 0) {
+		infg.stg += 4;
+		return 1;
+	    }
+	}
+
+	if ((tama_lv2[i1].x + 64 + 64 > ex)
+	    && (ex + w > tama_lv2[i1].x + 16)
+	    && (tama_lv2[i1].y - 32 + 192 > ey)
+	    && (tama_lv2[i1].y - 32 < ey + h)
+	    && (tama_lv2[i1].sr != -1)) {
+	    tama_lv2[i1].sr = -1;
+	    enemy[enemyno].p -= TAMALV2P;
+	    infg.stg++;
+	    if (enemy[enemyno].p <= 0) {
+		infg.stg += 4;
+		return 1;
+	    }
+	}
+	if ((tama_lv2[i1].x + 64 > ex) && (ex + w > tama_lv2[i1].x)
+	    && (tama_lv2[i1].y - 32 + 192 > ey)
+	    && (tama_lv2[i1].y - 32 < ey + h)
+	    && (tama_lv2[i1].sl != -1)) {
+	    tama_lv2[i1].sl = -1;
+	    enemy[enemyno].p -= TAMALV2P;
+	    infg.stg++;
+	    if (enemy[enemyno].p <= 0) {
+		infg.stg += 4;
+		return 1;
+	    }
+	}
+	if ((tama_lv2[i1].x - 64 + 64 > ex)
+	    && (ex + w > tama_lv2[i1].x - 64)
+	    && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
+	    && (tama_lv2[i1].ll != -1)) {
+	    tama_lv2[i1].ll = -1;
+	    enemy[enemyno].p -= TAMALV2P;
+	    infg.stg++;
+	    if (enemy[enemyno].p <= 0) {
+		infg.stg += 4;
+		return 1;
+	    }
+	}
+    }
+    if ((tlv3[0].r > 0) && (jiki.x < ex + w) && (jiki.x + 128 > ex)
+	&& (jiki.y > ey + h)) {
+	enemy[enemyno].p -= TAMALV3P;
+	infg.stg++;
+	if (enemy[enemyno].p <= 0) {
+	    infg.stg += 4;
+	    return 1;
+	}
+    }
+  jumping:
+    if ((tlv3[0].r > 0) && (jiki.x < ex + w) && (jiki.x + 128 > ex)
+	&& (jiki.y + 128 > ey) && (jiki.y < ey + h)) {
+	enemy[enemyno].p -= TAMALV3P;
+	infg.stg++;
+	if (enemy[enemyno].p <= 0) {
+	    infg.stg += 4;
+	    return 1;
+	}
+    }
+    /*laser lv1 */
+    for (i1 = 0; i1 < laser_lv1_end + 1; i1++) {
+	n = laser_lv1[i1].r * 128 / 4096;
+
+	if ((laser_lv1[i1].x + n > ex) && (ex + w > laser_lv1[i1].x)
+	    && (laser_lv1[i1].y + n > ey) && (laser_lv1[i1].y < ey + h)
+	    && (laser_lv1[i1].r != -1)) {
+	    laser_lv1[i1].r = -1;
+	    laser_lv1[i1].y = -1;
+	    enemy[enemyno].p -= LASERLV1P;
+	    infg.stg++;
+	    if (enemy[enemyno].p <= 0) {
+		infg.stg += 4;
+		return 1;
+	    }
+	}
+    }
+    /*shield(laser lv2) */
+    if ((enemy[enemyno].tama == TRUE) && (lg.stg > 0) &&
+	(laser_lv2[0].x + 128 > ex) && (ex + w > laser_lv2[0].x - 128)
+	&& (laser_lv2[0].y + 128 > ey) && (laser_lv2[0].y - 128 < ey + h)
+	&& (laser_lv2[0].r != 0)) {
+	enemy[enemyno].p -= LASERLV2P;
+	lg.stg -= 26;
+	infg.stg++;
+	if (enemy[enemyno].p <= 0) {
+	    infg.stg += 4;
+	    return 1;
+	}
+    }
+    /*bomber(laser lv3) */
+    if (laser_lv3[0].r < 62) {
+	for (i1 = 1; i1 < 128; i1++) {
+	    if ((laser_lv3[i1].x + 128 > ex) && (ex + w > laser_lv3[i1].x)
+		&& (laser_lv3[i1].y + 128 > ey)
+		&& (laser_lv3[i1].y < ey + h)
+		&& (laser_lv3[i1].r > 0)) {
+		tama_lv2[i1].rr = -1;
+		enemy[enemyno].p -= LASERLV3P;
+		infg.stg++;
+		if (enemy[enemyno].p <= 0) {
+		    infg.stg += 4;
+		    return 1;
+		}
+	    }
+	}
+    }
+    return (0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/atari.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,12 @@
+#include "Enemy.h"
+#ifndef _ATARI_H_
+#define _ATARI_H_
+
+
+extern int atari(int playerno, int enemyno);
+
+extern teki enemy[300];
+
+
+
+#endif				//_BOM_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/b64_de.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,84 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+struct tagTT
+{
+  unsigned char buf;
+  char *cont;
+  int nlen;
+};
+
+unsigned char CtoNum( int c );
+int GetNumB64( struct tagTT *pWork );
+
+int decode(char *cont, FILE *outfile)
+{
+  unsigned int rw;
+  struct tagTT work;
+  
+  work.buf = 0;
+  work.nlen = 0;
+  work.cont = cont;
+  
+  rw = GetNumB64( &work );
+  while ( rw != -1 ) 
+    {
+      putc( rw, outfile );
+      rw = GetNumB64( &work );
+    }
+  return 0;
+}
+
+
+int GetNumB64( struct tagTT *pWork )
+{
+  int wr;
+  unsigned char w;
+  unsigned char r;
+  
+  wr = *pWork->cont;
+  pWork->cont++;
+  if ( wr == '\0' || wr == '=' )
+    return -1;
+  
+  while(wr == '\n' || wr == '\t')
+    {
+      wr = *pWork->cont;
+      pWork->cont++;
+    }
+
+  w = CtoNum( wr );
+  if ( pWork->nlen == 0 )
+    {
+      unsigned char w2;
+
+      wr = *pWork->cont;
+      pWork->cont++;
+      if ( wr != '\0' && wr != '=' )
+	w2 = CtoNum( wr );
+      else
+	w2 = 0;
+
+      pWork->buf = w << 2;
+      w = w2;
+      pWork->nlen = 6;
+    }
+
+  pWork->nlen -= 2;	
+
+  r = pWork->buf | ( w >> pWork->nlen );
+
+  pWork->buf = ( w << ( 8 - pWork->nlen ) );
+  return r;
+}
+
+unsigned char CtoNum( int c )
+{
+  if ( c >= 'A' && c <= 'Z' ) return c - 'A';
+  if ( c >= 'a' && c <= 'z' ) return ( c - 'a' ) + 26;
+  if ( c >= '0' && c <= '9' ) return ( c - '0' ) + 52;
+  if ( c == '+' ) return 62;
+  if ( c == '/' ) return 63;
+  return -1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/back.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,35 @@
+#include <stdlib.h>
+#include <SDL.h>
+//#include "libps.h"
+#include "back.h"
+#include "debug.h"
+
+//GsBOXF *boxs, box[BOX_NUM];
+
+//BOXDT boxdt[BOX_NUM];
+
+void Back(GsOT * j)
+{
+    int i1;
+
+    for (i1 = 0; i1 < BOX_NUM - 1; i1++) {
+	boxdt[i1].y += boxdt[i1].s;
+	if (boxdt[i1].y > 240) {
+	    boxdt[i1].x = rand() % 320;
+	    boxdt[i1].y = 0;
+	}
+    }
+
+    boxs = box;
+    for (i1 = 1; i1 < BOX_NUM - 1; i1++, boxs++) {
+	boxs->attribute = 0;
+	boxs->x = boxdt[i1].x;
+	boxs->y = boxdt[i1].y;
+	boxs->w = 1;
+	boxs->h = 1;
+	boxs->r = rand() % 256;
+	boxs->g = rand() % 256;
+	boxs->b = rand() % 256;
+	GsSortBoxFill(boxs, j, 0);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/back.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,18 @@
+#ifndef _BACK_H_
+#define _BACK_H_
+
+#define BOX_NUM 11
+
+//extern GsBOXF *boxs, box[BOX_NUM];
+
+typedef
+    struct boxdt {
+    int x;
+    int y;
+    int s;
+} BOXDT;
+
+//extern void Back(GsOT * j);
+extern BOXDT boxdt[BOX_NUM];
+
+#endif				// _BACK_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bom.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,23 @@
+#ifndef _BOM_H_
+#define _BOM_H_
+
+typedef struct bomchar {
+    int x;
+    int y;
+    int f;
+    int no;
+} bomchar;
+
+extern void Bom(int x, int y);
+extern void Putbom();
+extern void Superbom();
+
+extern int count;
+
+extern int sb_size;
+extern int se_voice[9];
+extern int vab[10];
+extern bomchar bchar[100];
+
+
+#endif				// _BOM_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bool.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,8 @@
+#ifndef _BOOL_H_
+#define _BOOL_H_
+
+#define BOOL char
+#define TRUE    1
+#define FALSE   0
+
+#endif				// _BOOL_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/collision.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,267 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <SDL.h>
+#include "SDL_opengl.h"
+#include "object.h"
+#include "Character.h"
+#include "Character_state.h"
+#include "tokuten.h"
+#include "collision.h"
+//#include "atari.h"
+#include "bom.h"
+#include "count2.h"
+#include "sound.h"
+//#include "Enemy.h"
+//#include "libps.h"
+#include "sgoex.h"
+
+extern SpriteTable sptable[DEFOBJ];
+
+
+CHARACTER * atari(CHARACTER *p)
+{
+    int i1, h, w, ex, ey, charno;
+    int n;
+    ex = p->x;
+    ey = p->y;
+    charno = p->charano;
+    w = sptable[charno].w;
+    h = sptable[charno].h;
+    //i2 = playerno;
+
+
+    //自機やられ
+#ifndef INVISIBLE_MODE
+    if ((ex < jiki.x + 128 / 2) && (ex + w > jiki.x + 128 / 2)
+	&& (ey < jiki.y + 128 / 2) && (ey + h > jiki.y + 128 / 2)
+	&& jiki.muteki == 0) {
+      //se_voice[0] = SsUtKeyOn(vab[JIKIOUT], 0, 0, 65, 0, 60, 60);
+	Bom(jiki.x + 16, jiki.y + 16);
+	jiki.bf = FALSE;
+	jiki.zanki--;
+	jiki.muteki = 120;
+
+	infg.stg = 0;
+	infg_level--;
+	if (infg_level < 0)
+	    infg_level = 0;
+
+	return p;
+    }
+#endif
+
+    if (p->tama == TRUE)
+	goto jumping;
+    for (i1 = 0; i1 < tama_lv1_end + 1; i1++) {
+
+	if ((tama_lv1[i1].x + 64 + 64 > ex)
+	    && (ex + w > tama_lv1[i1].x + 16)
+	    && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
+	    && (tama_lv1[i1].r != -1)) {
+	    tama_lv1[i1].r = -1;
+	    p->vit -= TAMALV1P;
+	    infg.stg++;
+	    if (p->vit <= 0) {
+		infg.stg += 4;
+		Bom(p->x, p->y);
+		enemycount += (p->score *
+			       ((infg.stg / 128) + infg_level + 1));
+		p->state = delete_chara;
+		p->collision = noaction;
+		p->f = FALSE;
+		return p;
+	    }
+	}
+	if ((tama_lv1[i1].x + 64 > ex) && (ex + w > tama_lv1[i1].x)
+	    && (tama_lv1[i1].y + 128 > ey) && (tama_lv1[i1].y < ey + h)
+	    && (tama_lv1[i1].l != -1)) {
+	    tama_lv1[i1].l = -1;
+	    p->vit -= TAMALV1P;
+	    infg.stg++;
+	    if (p->vit <= 0) {
+		infg.stg += 4;
+		Bom(p->x, p->y);
+		enemycount += (p->score *
+			       ((infg.stg / 128) + infg_level + 1));
+		p->state = delete_chara;
+		p->collision = noaction;
+		p->f = FALSE;
+		return p;
+	    }
+	}
+    }
+
+    for (i1 = 0; i1 < tama_lv2_end + 1; i1++) {
+	if ((tama_lv2[i1].x + 128 + 64 > ex)
+	    && (ex + w > tama_lv2[i1].x + 128)
+	    && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
+	    && (tama_lv2[i1].rr != -1)) {
+	    tama_lv2[i1].rr = -1;
+	    p->vit -= TAMALV2P;
+	    infg.stg++;
+	    if (p->vit <= 0) {
+		infg.stg += 4;
+		Bom(p->x, p->y);
+		enemycount += (p->score *
+			       ((infg.stg / 128) + infg_level + 1));
+		p->state = delete_chara;
+		p->collision = noaction;
+		p->f = FALSE;
+		return p;
+	    }
+	}
+
+	if ((tama_lv2[i1].x + 64 + 64 > ex)
+	    && (ex + w > tama_lv2[i1].x + 16)
+	    && (tama_lv2[i1].y - 32 + 192 > ey)
+	    && (tama_lv2[i1].y - 32 < ey + h)
+	    && (tama_lv2[i1].sr != -1)) {
+	    tama_lv2[i1].sr = -1;
+	    p->vit -= TAMALV2P;
+	    infg.stg++;
+	    if (p->vit <= 0) {
+		infg.stg += 4;
+		Bom(p->x, p->y);
+		enemycount += (p->score *
+			       ((infg.stg / 128) + infg_level + 1));
+		p->state = delete_chara;
+		p->collision = noaction;
+		p->f = FALSE;
+		return p;
+	    }
+	}
+	if ((tama_lv2[i1].x + 64 > ex) && (ex + w > tama_lv2[i1].x)
+	    && (tama_lv2[i1].y - 32 + 192 > ey)
+	    && (tama_lv2[i1].y - 32 < ey + h)
+	    && (tama_lv2[i1].sl != -1)) {
+	    tama_lv2[i1].sl = -1;
+	    p->vit -= TAMALV2P;
+	    infg.stg++;
+	    if (p->vit <= 0) {
+		infg.stg += 4;
+		Bom(p->x, p->y);
+		enemycount += (p->score *
+			       ((infg.stg / 128) + infg_level + 1));
+		p->state = delete_chara;
+		p->collision = noaction;
+		p->f = FALSE;
+		return p;
+	    }
+	}
+	if ((tama_lv2[i1].x - 64 + 64 > ex)
+	    && (ex + w > tama_lv2[i1].x - 64)
+	    && (tama_lv2[i1].y + 192 > ey) && (tama_lv2[i1].y < ey + h)
+	    && (tama_lv2[i1].ll != -1)) {
+	    tama_lv2[i1].ll = -1;
+	    p->vit -= TAMALV2P;
+	    infg.stg++;
+	    if (p->vit <= 0) {
+		infg.stg += 4;
+		Bom(p->x, p->y);
+		enemycount += (p->score *
+			       ((infg.stg / 128) + infg_level + 1));
+		p->state = delete_chara;
+		p->collision = noaction;
+		p->f = FALSE;
+		return p;
+	    }
+	}
+    }
+    if ((tlv3[0].r > 0) && (jiki.x < ex + w) && (jiki.x + 128 > ex)
+	&& (jiki.y > ey + h)) {
+	p->vit -= TAMALV3P;
+	infg.stg++;
+	if (p->vit <= 0) {
+	    infg.stg += 4;
+	    Bom(p->x, p->y);
+	    enemycount += (p->score *
+			   ((infg.stg / 128) + infg_level + 1));
+	    p->state = delete_chara;
+	    p->collision = noaction;
+	    p->f = FALSE;
+	    return p;
+	}
+    }
+  jumping:
+    if ((tlv3[0].r > 0) && (jiki.x < ex + w) && (jiki.x + 128 > ex)
+	&& (jiki.y + 128 > ey) && (jiki.y < ey + h)) {
+	p->vit -= TAMALV3P;
+	infg.stg++;
+	if (p->vit <= 0) {
+	    infg.stg += 4;
+	    Bom(p->x, p->y);
+	    enemycount += (p->score *
+			   ((infg.stg / 128) + infg_level + 1));
+	    p->state = delete_chara;
+	    p->collision = noaction;
+	    p->f = FALSE;
+	    return p;
+	}
+    }
+    /*laser lv1 */
+    for (i1 = 0; i1 < laser_lv1_end + 1; i1++) {
+	n = laser_lv1[i1].r * 128 / 4096;
+
+	if ((laser_lv1[i1].x + n > ex) && (ex + w > laser_lv1[i1].x)
+	    && (laser_lv1[i1].y + n > ey) && (laser_lv1[i1].y < ey + h)
+	    && (laser_lv1[i1].r != -1)) {
+	    laser_lv1[i1].r = -1;
+	    laser_lv1[i1].y = -1;
+	    p->vit -= LASERLV1P;
+	    infg.stg++;
+	    if (p->vit <= 0) {
+		infg.stg += 4;
+		Bom(p->x, p->y);
+		enemycount += (p->score *
+			       ((infg.stg / 128) + infg_level + 1));
+		p->state = delete_chara;
+		p->collision = noaction;
+		p->f = FALSE;
+		return p;
+	    }
+	}
+    }
+    /*shield(laser lv2) */
+    if ((p->tama == TRUE) && (lg.stg > 0) &&
+	(laser_lv2[0].x + 128 > ex) && (ex + w > laser_lv2[0].x - 128)
+	&& (laser_lv2[0].y + 128 > ey) && (laser_lv2[0].y - 128 < ey + h)
+	&& (laser_lv2[0].r != 0)) {
+	p->vit -= LASERLV2P;
+	lg.stg -= 26;
+	infg.stg++;
+	if (p->vit <= 0) {
+	    infg.stg += 4;
+	    Bom(p->x, p->y);
+	    enemycount += (p->score *
+			   ((infg.stg / 128) + infg_level + 1));
+	    p->state = delete_chara;
+	    p->collision = noaction;
+	    p->f = FALSE;
+	    return p;
+	}
+    }
+    /*bomber(laser lv3) */
+    if (laser_lv3[0].r < 62) {
+	for (i1 = 1; i1 < 128; i1++) {
+	    if ((laser_lv3[i1].x + 128 > ex) && (ex + w > laser_lv3[i1].x)
+		&& (laser_lv3[i1].y + 128 > ey)
+		&& (laser_lv3[i1].y < ey + h)
+		&& (laser_lv3[i1].r > 0)) {
+		tama_lv2[i1].rr = -1;
+		p->vit -= LASERLV3P;
+		infg.stg++;
+		if (p->vit <= 0) {
+		    infg.stg += 4;
+		    Bom(p->x, p->y);
+		    enemycount += (p->score *
+				   ((infg.stg / 128) + infg_level + 1));
+		    p->state = delete_chara;
+		    p->collision = noaction;
+		    p->f = FALSE;
+		    return p;
+		}
+	    }
+	}
+    }
+    return p;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/collision.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,7 @@
+#include "Character.h"
+#ifndef collision_h
+#define collision_h 1
+
+CHARACTER * atari(CHARACTER *p);
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/count2.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,415 @@
+#include <stdlib.h>
+#include "object.h"
+#include "count2.h"
+#include "sound.h"
+#include "bom.h"
+#include "sankaku.h"
+//#include "libps.h"
+#include "sgoex.h"
+#include "debug.h"
+extern int SsUtKeyOn(int vabId, int prog, int tone, int note, int fine, int voll, int vlor);
+
+
+/*
+ *    debugging
+ */
+extern SGO_PAD pad[2];
+
+player jiki = { 60, 200, 3, 0, FALSE, 120, 3, 3 };
+
+laser laser_lv1[20];
+laser laser_lv2[20];
+stge lg = { 4096 };
+stge pg = { 4096 };
+
+int infg_level = { 0 };
+
+stge infg = { 1 };
+
+tama1 tama_lv1[20];
+tama2 tama_lv2[20];
+tama1 tlv3[3];
+
+int py;
+int bomcount = { 0 };
+int charcount = { 0 };
+int bania;
+
+int pointkakudo(int playerno);
+
+int bf = { 0 };
+
+int tama_lv1_end = { -1 };
+int tama_lv2_end = { -1 };
+int laser_lv1_end = { -1 };
+int laser_lv2_end = { -1 };
+
+laser laser_lv3[64] = { {0, 0, 0, 0, 64, 0} };
+
+int se_key[6] = { -1, -1, -1, -1, -1, -1 };
+
+void Player(int playerno)
+{
+    int i;
+    float wariai1, wariai2;
+    /*
+    if (jiki.zanki > 0) {
+      DefSprite(194, "remainder.bmp", 8 * (jiki.zanki - 1), 8, 480, effect);
+      count++;
+      PutSprite(count, 128, 224, 194);
+    }
+    */
+    if (jiki.bf == FALSE) {
+	Bom(jiki.x, jiki.y);
+	return;
+    }
+    /*時機無敵時間計算 */
+    if (jiki.muteki > 0 && jiki.bf == TRUE) {
+	count++;
+	//	PutSprite(count, jiki.x + 16, jiki.y + 16, 193);
+	PutSpriteEx(193, jiki.x + 16, jiki.y + 16, 2, 2, 1);
+	count++;
+	//	PutSprite(count, jiki.x + 16, jiki.y + 16, 193);
+	PutSpriteEx(193, jiki.x + 16, jiki.y + 16, 2, 2, 1);
+
+	jiki.muteki--;
+    }
+    /*コントローラ上限値-------------------------------- */
+    maxf(pad[0].right, 3);
+    maxf(pad[0].left, 3);
+    maxf(pad[0].up, 3);
+    maxf(pad[0].down, 3);
+
+
+    /*自機の動き---------------------------------------- */
+    jiki.x += pad[0].right - pad[0].left;
+    jiki.y += pad[0].down - pad[0].up;
+
+
+    /*自機の動き---------------------------------------- */
+    mini(jiki.x, 0);
+    maxf(jiki.x, 1688 - 128);
+    mini(jiki.y, 0);
+    maxf(jiki.y, 964 - 128);
+
+    if (pad[0].right > 0) {
+	if (charcount < 0)
+	    charcount = 0;
+	else
+	    charcount++;
+    }
+    if (pad[0].left > 0) {
+	if (charcount > 0)
+	    charcount = 0;
+	else
+	    charcount--;
+    }
+    if ((pad[0].left == 0) && (pad[0].right == 0))
+	charcount = 0;
+    jiki.ch =
+	3 * (charcount < 3) * (charcount > -3) + 2 * (charcount <
+						      -3) * (charcount >=
+							     -15) +
+	1 * (charcount < -15)
+	+ 4 * (charcount > 3) * (charcount <= 15) + 5 * (charcount > 15);
+
+
+    /*玉レベル1登録------------------------------------ */
+    if ((pad[0].k4 % 3 == 1) && (pad[0].k3 % 3 == 0)) {
+
+      PlaySdlMixer(0, SHOT_A);// output sound  
+      //se_voice[0] = SsUtKeyOn(vab[SHOT_A], 0, 0, 65, 0, 60, 60);
+	pad[0].k4 = 1;
+	tama_lv1_end++;
+	i = tama_lv1_end;
+
+	tama_lv1[i].x = jiki.x;
+	tama_lv1[i].y = jiki.y;
+	tama_lv1[i].r = 1;
+	tama_lv1[i].l = 1;
+
+	if (pg.stg <= MAXP)
+	    pg.stg += 1;
+    }
+    /*玉レベル2登録------------------------------------ */
+    if ((pad[0].k3 % 3 == 1) && (pad[0].k4 == 0) && (pg.stg > 64)) {
+
+      PlaySdlMixer(0, SHOT_B);// output sound                                                                               
+      //se_key[1] = SsUtKeyOn(vab[SHOT_B], 0, 0, 65, 0, 80, 80);
+	se_key[1] = SsUtKeyOn(vab[SHOT_B], 0, 0, 65, 0, 80, 80);
+	pad[0].k3 = 1;
+	tama_lv2_end++;
+	i = tama_lv2_end;
+
+	tama_lv2[i].x = jiki.x;
+	tama_lv2[i].y = jiki.y;
+	tama_lv2[i].rr = 1;
+	tama_lv2[i].sr = 1;
+	tama_lv2[i].sl = 1;
+	tama_lv2[i].ll = 1;
+
+	pg.stg -= 64;
+    }
+    /*玉レベル3登録------------------------------------- */
+    if ((pad[0].k3 % 5 > 0) && (pad[0].k4 % 5 > 0)) {
+	pad[0].k3 = 1;
+	pad[0].k4 = 1;
+	i = 0;
+	while (tlv3[i].y != -1) {
+	    i++;
+	}
+	if ((i < 1) && (pg.stg > 2000)) {
+	  PlaySdlMixer(0,SHOT_C); // re-za-                              
+          //se_voice[0] = SsUtKeyOn(vab[SHOT_C], 0, 0, 65, 0, 75, 75);  
+	    se_voice[0] = SsUtKeyOn(vab[SHOT_C], 0, 0, 65, 0, 75, 75);
+	    tlv3[i].x = jiki.x;
+	    tlv3[i].y = jiki.y;
+	    pg.stg -= 2000;
+	    tlv3[i].r = 90;
+	    jiki.muteki = 4;
+	}
+    }
+    /*押してないときの玉ゲージ回復---------------------- */
+    if ((pad[0].k3 == 0) && (pad[0].k4 == 0))
+	if (pg.stg <= MAXP)
+	    pg.stg += 4;
+    /*玉レベル1表示------------------------------ */
+    for (i = 0; i < tama_lv1_end + 1; i++) {
+	tama_lv1[i].y -= 64;
+	if (tama_lv1[i].r == 1) {
+	    count++;
+	    PutSprite(count, tama_lv1[i].x + 64, tama_lv1[i].y, 6);
+	}
+	if (tama_lv1[i].l == 1) {
+	    count++;
+	    PutSprite(count, tama_lv1[i].x, tama_lv1[i].y, 7);
+	}
+	if (tama_lv1[i].y < 0) {
+	    if (tama_lv1_end == i) {
+		tama_lv1_end--;
+		break;
+	    }
+	    if (tama_lv1_end > i) {
+		tama_lv1[i] = tama_lv1[tama_lv1_end];
+		tama_lv1_end--;
+		i--;
+	    }
+	}
+    }
+    /*玉レベル2表示------------------------------ */
+    for (i = 0; i < tama_lv2_end + 1; i++) {
+	tama_lv2[i].y -= 64;
+	if (tama_lv2[i].rr == 1) {
+	    count++;
+	    PutSprite(count, tama_lv2[i].x + 128, tama_lv2[i].y-96, 8);
+	}
+	if (tama_lv2[i].sr == 1) {
+	    count++;
+	    PutSprite(count, tama_lv2[i].x + 64, tama_lv2[i].y - 192, 8);
+	}
+	if (tama_lv2[i].sl == 1) {
+	    count++;
+	    PutSprite(count, tama_lv2[i].x, tama_lv2[i].y - 192, 8);
+	}
+	if (tama_lv2[i].ll == 1) {
+	    count++;
+	    PutSprite(count, tama_lv2[i].x - 64, tama_lv2[i].y-92, 8);
+	}
+	if (tama_lv2[i].y < 0) {
+	    if (tama_lv2_end == i) {
+		tama_lv2_end--;
+		break;
+	    }
+	    if (tama_lv2_end > i) {
+		tama_lv2[i] = tama_lv2[tama_lv2_end];
+		tama_lv2_end--;
+		i--;
+	    }
+	}
+    }
+    /*玉レベル3表示----------------------------------- */
+    if (tlv3[0].r > 0) {
+	/*波動砲本体 */
+	tlv3[0].x = jiki.x + 96;
+	tlv3[0].y = jiki.y;
+	count++;
+	//	PutSprite(count, tlv3[0].x, tlv3[0].y - 128, 9);
+	PutSpriteEx(9, tlv3[0].x, tlv3[0].y - 128, tlv3[0].r *2 /45, 3, 1);
+
+
+	/*干渉部分 */
+	//DefSprite(39, 0, 16, 112 - ((tlv3[0].r % 8) / 2) * 16, 16, 16,
+	//  480);
+
+	/*波動砲干渉部分 */
+	count++;
+	//	PutSprite(count, jiki.x + 16, jiki.y + 32, 39);
+	PutSpriteEx(39, jiki.x + 16, jiki.y + 32, 2, 2, 1);
+
+	/*終了フラグ */
+	tlv3[0].r--;
+	if (tlv3[0].r == 0)
+	    tlv3[0].y = -1;
+    }
+    /*  } */
+    /*玉ゲージの中身表示------------------------- */
+    wariai2 = pg.stg;
+    wariai1 = wariai2 / 4096.0;
+    py = 64.0 * wariai1;
+
+    //DefSprite(11, "offensivepower_gauge.bmp", 8, py, 480, effect);
+    count++;
+    //PutSprite(count, 0, 240 - 96 + 64 - py, 11);
+    /*レーザーゲージの中身表示------------------------ */
+    wariai2 = lg.stg;
+    wariai1 = wariai2 / 4096.0;
+    py = 64.0 * wariai1;
+    //DefSprite(15, "diffensivepower_gauge.bmp", 9, py, 480, effect);
+
+    count++;
+    //PutSprite(count, 18, 240 - 105, 15);
+    /*インフレゲージ------------------------------------- */
+    if (infg.stg > 640) {
+	infg.stg = 0;
+	infg_level++;
+	if (infg_level > 11) {
+	    infg_level = 11;
+	    infg.stg = 640;
+	}
+    }
+    py = infg.stg / 8;
+    //DefSprite(49, "inflation_meter.bmp", 16, py, 320, effect);
+
+#define REGULATION_PUTSIZE_X 5
+    count++;
+    //PutSprite(count, REGULATION_PUTSIZE_X + 4 - 7, 24 + 83 - py, 49);
+    count++;
+    //PutSprite(count, REGULATION_PUTSIZE_X + 0, 40 + 80, 200 + infg_level);
+
+    /*バーニアアニメーション----------------------------- */
+    bania++;
+    bania %= 3;
+    //DefSprite(12, "burner.bmp", 16, 16, 480, effect);
+    count++;
+    //PutSprite(count, jiki.x + 8, jiki.y + 32, 12);
+
+    /*照準コントロール----------------------------------- */
+    if (pad[0].r1 % 2 == 1) {
+	pad[0].r1 = 1;
+	jiki.point += 10;
+    }
+    if (pad[0].l1 % 2 == 1) {
+	pad[0].l1 = 1;
+	jiki.point -= 10;
+    }
+    jiki.point %= 360;
+    int siny = 50 * Mysin(jiki.point - 90) / SANKAKU;
+    int cosx = 30 + 50 * Mycos(jiki.point - 90) / SANKAKU;
+    count++;
+    DefSpriteEx(13, 4, 64);
+    //    PutSprite(count, jiki.x + 16, jiki.y, 13);
+    PutSpriteEx(13, jiki.x + cosx, jiki.y + siny, 2, 2, jiki.point);
+    /*押してないときレーザーゲージ回復------------------- */
+
+    if ((pad[0].k1 == 0) && (pad[0].k0 == 0))
+	if (lg.stg <= MAXP)
+	    lg.stg += 4;
+    /*レーザーレベル1登録------------------------------- */
+    if ((pad[0].k1 % 3 == 1) && (pad[0].k0 == 0) && (lg.stg > 16)) {
+      PlaySdlMixer(0, RING) ; // RING  
+
+      //se_key[3] = SsUtKeyOn(vab[LASER_A], 0, 0, 65, 0, 50, 50);
+	pad[0].k1 = 1;
+	laser_lv1_end++;
+	i = laser_lv1_end;
+
+	laser_lv1[i].sx = 32 * Mysin(jiki.point) / SANKAKU;
+	laser_lv1[i].sy = 32 * Mycos(jiki.point) / SANKAKU;
+	laser_lv1[i].x = jiki.x + 128;
+	laser_lv1[i].y = jiki.y + 128;
+	laser_lv1[i].r = 1000;
+	laser_lv1[i].s = 0.08;
+	lg.stg -= 16;
+    }
+    /*--------------------------------------------------*/
+    for (i = 0; i < laser_lv1_end + 1; i++) {
+	if (laser_lv1[i].r != -1) {
+	    laser_lv1[i].y -= laser_lv1[i].sy;
+	    laser_lv1[i].x += laser_lv1[i].sx;
+	    laser_lv1[i].r += 100;
+	    laser_lv1[i].s += 0.05;
+	    count++;
+	    DefSpriteEx(16, 16, 16);
+	    //	    PutSprite(count, laser_lv1[i].x, laser_lv1[i].y, 16);
+	    PutSpriteEx(16, laser_lv1[i].x, laser_lv1[i].y, laser_lv1[i].s, laser_lv1[i].s, 1);
+	}
+	if (waku(laser_lv1[i].x, laser_lv1[i].y)) {
+	    if (laser_lv1_end == i) {
+		laser_lv1_end--;
+		break;
+	    }
+	    if (laser_lv1_end > i) {
+		laser_lv1[i] = laser_lv1[laser_lv1_end];
+		laser_lv1_end--;
+		i--;
+	    }
+	}
+    }
+    /*レーザーレベル2登録------------------------------- */
+    if ((pad[0].k1 == 0) && (pad[0].k0 != 0) && (lg.stg > 200)) {
+      PlaySdlMixer(0, NEW) ;// SHIELD 
+
+	if (laser_lv2[0].r == 0) {
+	    laser_lv2[0].r = 1;
+	    lg.stg -= 100;
+	} else {
+	    laser_lv2[0].r %= 45;
+	    laser_lv2[0].r++;
+	    lg.stg -= 10;
+	}
+    } else {
+	laser_lv2[0].r = 0;
+    }
+    /*------------------------------------*/
+    if (laser_lv2[0].r != 0) {
+	laser_lv2[0].x = jiki.x + 128 + 256 * Mysin(jiki.point) / SANKAKU;
+	laser_lv2[0].y = jiki.y + 128  - 256 * Mycos(jiki.point) / SANKAKU;
+	count++;
+	//	PutSprite(count, laser_lv2[0].x, laser_lv2[0].y, 17);
+	PutSpriteEx(17, laser_lv2[0].x, laser_lv2[0].y, 2, 2, laser_lv2[0].r * 8);
+    }
+
+/*ここに特殊兵器ボムの関数をよろしく*/
+/*発射準備 (laser_lv3[playerno][0] は、爆発発生の種。)*/
+    if ((pad[0].k1 > 0) && (pad[0].k0 > 0)
+	&& (lg.stg > 2400) && (laser_lv3[0].r > 61)) {
+      PlaySdlMixer(0, BOM) ;// BOM 
+      //se_voice[0] = SsUtKeyOn(vab[LASER_C], 0, 0, 65, 0, 70, 70);
+
+	laser_lv3[0].x = jiki.x + 256 * Mysin(jiki.point) / SANKAKU;
+	laser_lv3[0].y = jiki.y - 256 * Mycos(jiki.point) / SANKAKU;
+	laser_lv3[0].r = 0;
+	lg.stg -= 2400;
+	jiki.muteki = 60;
+    }
+    if (laser_lv3[0].r < 62) {	/*ボムフラグ継続か */
+	laser_lv3[0].r++;
+	if (laser_lv3[0].r % 2 == 0) {	/*爆風発生 */
+	    laser_lv3[1 + laser_lv3[0].r / 2].r = 8;
+	    laser_lv3[1 + laser_lv3[0].r / 2].x =
+		laser_lv3[0].x + rand() % 640 - 320;
+	    laser_lv3[1 + laser_lv3[0].r / 2].y =
+		laser_lv3[0].y + rand() % 640 - 320;
+	}
+    }
+    /*ボムノアニメーション */
+    for (i = 1; i < 32; i++) {
+	if (laser_lv3[i].r > 0) {
+	    laser_lv3[i].r--;
+	    count++;
+	    //	    PutSprite(count, laser_lv3[i].x, laser_lv3[i].y,
+	    //		      47 - (laser_lv3[i].r));
+	    PutSpriteEx(47 - (laser_lv3[i].r), laser_lv3[i].x, laser_lv3[i].y, 4, 4, 1);
+	}
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/count2.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,87 @@
+#include "bool.h"
+#ifndef _COUNT2_H_
+#define _COUNT2_H_
+
+
+#define MAXP 4096
+#define waku(x,y) ( ((y<0)||(y>964)||(x<0)||(x>1688)) ? 1 : 0)
+#define maxf(x,y)     x=( (x<y) ? x : y)
+#define mini(x,y)    x=( (x<y) ? y : x)
+#define TAMALV1P 14
+#define TAMALV2P 50
+#define TAMALV3P 24
+
+#define LASERLV1P 17
+#define LASERLV2P 154
+#define LASERLV3P 51
+
+typedef struct player {
+    int x;
+    int y;
+    int ch;
+    int point;
+    BOOL bf;
+    int muteki;
+    int zanki;
+    int ccount;
+} player;
+
+typedef struct tama {
+    int x;
+    int y;
+} tama;
+
+typedef struct tama1 {
+    int x;
+    int y;
+    int r;
+    int l;
+} tama1;
+
+typedef struct tama2 {
+    int x;
+    int y;
+    int rr;
+    int sr;
+    int sl;
+    int ll;
+} tama2;
+
+typedef struct stge {
+    int stg;
+} stge;
+
+typedef struct laser {
+    float x;
+    float y;
+    float sx;
+    float sy;
+    int r;
+    int enemyno;
+  float s;
+} laser;
+
+extern int pointkakudo(int playerno);
+extern void Player(int playerno);
+extern laser laser_lv3[64];
+extern tama1 tlv3[3];
+
+extern player jiki;
+
+extern stge lg;
+extern stge pg;
+extern stge infg;
+extern int infg_level;
+
+extern tama1 tama_lv1[20];
+extern tama2 tama_lv2[20];
+
+extern laser laser_lv1[20];
+extern laser laser_lv2[20];
+
+extern int laser_lv1_end;
+
+extern int tama_lv1_end;
+extern int tama_lv2_end;
+
+#endif				// _COUNT2_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debug.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,22 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include "count2.h"
+#include "Enemy.h"
+
+static FILE *dbg_fp;
+
+void dbg_init(char *fname)
+{
+  dbg_fp = fopen(fname, "w");
+}
+
+int dbg_printf(char *format, ...)
+{
+    va_list ap;
+    va_start(ap, format);
+    vfprintf(dbg_fp, format, ap);
+    va_end(ap);
+//    fflush(dbg_fp);
+    return (0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debug.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,51 @@
+#ifndef __debug_h
+#define __debug_h
+
+#if 0
+extern code(*abort_ptr) ();
+#define SET_ABORT(x) code (*abort_ptr)()=(x)
+
+extern code dbg_abort(int errcode);
+// #define DEBUG_ABORT(errcode) {goto dbg_abort(errcode);}
+
+extern void print_profile();
+
+#ifndef ALLOC_STACK
+#include"stack.h"
+#endif
+
+extern Stack current_sp;
+extern Stack stack_peak;
+
+#undef ALLOC_STACK
+#define ALLOC_STACK(sp,size) {\
+    (sp)-=(size);\
+    current_sp=(sp);\
+    if(sp<stack_peak){\
+        stack_peak=sp;\
+    }\
+    if((sp)<general_stack){\
+        goto dbg_abort(2);\
+    }\
+}
+#undef FREE_STACK
+#define FREE_STACK(sp,size) {\
+    (sp)+=(size);\
+    current_sp=(sp);\
+    if((sp)>Stacklast){\
+        goto dbg_abort(3);\
+    }\
+}
+#endif
+
+extern void dbg_init(char *);
+extern int dbg_printf(char *, ...);
+
+#ifdef USE_MYRAND
+extern int myrand(void);
+extern int myrand_open_file(char *);
+#define rand myrand
+#else
+#define myrand_open_file(f) (0)
+#endif
+#endif				// __debug_h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/error.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,8 @@
+#ifdef _DEBUG_
+#  include <stdio.h>
+#  define __debug(...) do {			\
+	fprintf(stderr, __VA_ARGS__);		\
+    } while (0)
+#else /* !_DEBUG_ */
+#  define __debug(...)
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,470 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <time.h>
+#include <SDL.h>
+#include "SDL_opengl.h"
+#include "object.h"
+#include "tree_controll.h"
+#include "xml.h"
+#include "profile.h"
+#include "syokika.h"
+//#include "libps.h"
+#include "sankaku.h"
+#include "sgoex.h"
+#include "sound.h"
+#include "bool.h"
+//#include "move.h"
+#include "Character.h"
+#include "Character_state.h"
+#include "bom.h"
+#include "count2.h"
+//#include "Enemy.h"
+#include "tokuten.h"
+#include "schedule.h"
+#include "tama.h"
+//#include"profile.h"
+#include "debug.h"
+#include "trace.h"
+#include "LoadSprite.h"
+#include <SDL_mixer.h>
+
+#include "error.h"
+
+int gamef = 0;
+int use_keybord = 0;
+int cdp[20] = { 16, 16, 16, 17, 18, 0 };
+int d, i;
+
+int rswait = 0;
+int cf = 0;
+int cc = 0;
+
+//static SDL_Surface *screen;
+static Uint32 background;
+// static char *pad_trace_file;
+
+extern void schedule();
+extern void tokuten();
+extern void Pad();
+extern void keybord();
+//extern void PutSpriteEx(int number, int x, int y, GLfloat scalex, GLfloat scaley, GLfloat angle);
+//GLuint texture[250] = {0};
+static void gamesyokika();
+static void opening();
+static void pause();
+//static char *pad_trace_file;
+extern void SDL_GL_Enter2DMode();
+extern void SDL_GL_Leave2DMode();
+
+/**
+ * runmode:
+ * 0 - normal game                                                         
+ * 1 - capture mode                                                        
+ *     program will capture all pad traces on a play and               
+ *     dump it into a file                                             
+ * 2 - trace mode                                                          
+ *     program will run with a trace file which is generated           
+ *     by capture-mode
+ */
+int runmode;
+
+#ifdef ENABLE_TRACEMODE
+#define SCMP_SIZ 8
+
+
+void print_usage()
+{
+    dbg_printf("usage: %s [-h|-help|--help][--capture filename][--trace filename]\n",PROGRAM_NAME);
+}
+
+
+
+int get_option(int argc, char *argv[])
+{
+    int i;
+    if (argc < 2) {
+	return 0;
+    }
+    for (i = 0; i < argc; i++) {
+	if (!strncmp(argv[i], "--capture", SCMP_SIZ)) {
+	    if (++i >= argc) {
+		return 1;
+	    }
+	    pad_trace_file = argv[i];
+	    runmode = 1;
+	    return 0;
+	} else if (!strncmp(argv[i], "--trace", SCMP_SIZ)) {
+	    if (++i >= argc) {
+		return 1;
+	    }
+	    pad_trace_file = argv[i];
+	    runmode = 2;
+	    return 0;
+	} else if (!strncmp(argv[i], "--help", SCMP_SIZ) ||
+		   !strncmp(argv[i], "-help", SCMP_SIZ) ||
+		   !strncmp(argv[i], "-h", SCMP_SIZ)) {
+	    return 1;
+	}
+    }
+    return 1;
+}
+#endif                          //ENABLE_TRACEMODE 
+
+
+int main(int argc, char *argv[])
+{
+    Timeprof timeprof_move;
+    timeprof_move = timeprof_new();
+    dbg_init("/dev/stdout");
+
+    /**
+     * timeprof があるんだけどね
+     */
+    int frames = 0;
+    int start_time = 0, stop_time = 0;
+
+#ifdef ENABLE_TRACEMODE
+    if (get_option(argc, argv)) {
+	print_usage();
+	return (1);
+    }
+    if (pad_trace_file) {
+	pad_file_open(pad_trace_file);
+    }
+    if(myrand_open_file("rand_trace")) {
+	perror("main");
+	retun 1;
+    }
+#endif    //ENABLE_TRACEMODE
+
+    //SDL_Joystick *joy=SDL_JoystickOpen(0);
+  
+    syokika(argc, argv);
+    __debug("syokikaが呼びだされました\n");
+    SDL_Joystick *joy=SDL_JoystickOpen(0);
+    if(!joy) {
+	fprintf(stderr,"failed to open joystick 0\n");
+	use_keybord = 1;
+    }
+    background = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00);
+    SDL_FillRect(screen, NULL, background);
+    SDL_GL_Enter2DMode();
+
+    opening(joy);
+
+    __debug("openingがよびだされました\n");
+
+    /**
+     * sound.c に移しました
+     * 代わりに InitSdlMixer(void); を使います。
+     * まあ中身一緒なんだけどね
+     */
+    /**
+      if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,MIX_DEFAULT_FORMAT,2,1024) < 0) {
+        fprintf(stderr,"failed to initialize SDL_mixer.\n");
+        SDL_Quit();
+        exit(-1);
+      }
+    */
+
+    // SDL_mixer とかいろいろ初期化
+    // もし Init に失敗したら
+    // 以後の Mixer 関連の関数を呼び出しても
+    // 中では何も行われないとかいう小細工を入れました。
+    InitSdlMixer();
+
+    // 音楽ファイルの読み込み
+    LoadSdlMixer();
+
+    // ボリューム調整
+    InitVolume();
+	
+    // 音出しテスト
+    PlaySdlMixer(-1, BGM);
+
+    if(!(init_chara_list(1024))){
+	__debug("failed to init_chara_list\n");
+    }
+
+    __debug("finished init_chara_list\n");
+
+    start_time = SDL_GetTicks();
+
+    while (gamef) {
+	if ((pad[0].l1 != 0) && (pad[0].r1 != 0) &&
+	    (pad[0].l2 != 0) && (pad[0].r2 != 0)) {
+	    glFlush();
+	    SDL_GL_SwapBuffers( );
+	    gamesyokika(joy);
+	}
+
+	if (pad[0].quit != 0) {
+	    gamef = 0;
+	}
+
+	//SDL_FillRect(screen, NULL, background);
+	glClear( GL_COLOR_BUFFER_BIT);		
+    
+	schedule();
+	enemyfaste = count;
+    
+	timeprof_begin(timeprof_move);
+	//Move(); //enemy move
+	collision_detect();
+	outofwindow();
+	timeprof_end(timeprof_move);
+	state_update();
+	asteroidi = 0;
+	//charpatern();
+	//bosguage();
+
+	if (jiki.bf == TRUE) {
+	    Player(0);
+	    count++;
+	    PutSprite(count, jiki.x, jiki.y, jiki.ch);
+	}
+
+	Putbom();
+	tokuten();
+    
+	count++;
+	//PutSprite(count, 0, 960 - 96, 10);
+	/*インフレゲージ */
+	count++;
+	//PutSprite(count, 0, 0, 48);
+	obj_draw();
+	pause(joy);
+
+	if (use_keybord) {
+	    keybord();
+	} else {
+	    Pad(joy);
+	}
+
+	glFlush();
+	SDL_GL_SwapBuffers( );
+	filpcount++;
+	SDL_Delay(10);
+	count = 0;
+
+
+	frames++;
+    }
+
+    stop_time = SDL_GetTicks();
+    
+    {
+	char buf[128];
+	timeprof_sprint(buf, "move", timeprof_move);
+	dbg_printf("%s\n", buf);
+    }
+
+    printf("%f FPS\n", ((float)frames)/(stop_time-start_time)*1000.0);
+
+    SDL_GL_Leave2DMode();
+    SDL_FreeSurface(sprite);
+
+    SDL_JoystickClose(joy);
+
+    //_______________________________________________
+    // SDL_mixerの後始末
+    Mix_CloseAudio();
+    Mix_HaltMusic();
+    FreeSdlMixer() ;
+    //_______________________________________________
+
+  
+    SDL_Quit();
+    return(0);
+}
+
+
+void gamesyokika(SDL_Joystick *joy)
+{
+    laser_lv3[0].r = 62;
+    laser_lv3[0].r = 62;
+    for (i = 0; i < 3; i++) {
+	tlv3[i].y = -1;
+    }
+    filpcount = 0;
+    stage = 0;
+    //for (i = 0; i < 300; i++)
+    //enemy[i].f = FALSE;
+    jiki.zanki = 3;
+    jiki.x = 60;
+    jiki.y = 200;
+    jiki.ch = 3;
+    jiki.point = 0;
+    jiki.bf = FALSE;
+    jiki.muteki = 120;
+    enemycount = 0;
+    lg.stg = 4096;
+    pg.stg = 4096;
+    infg.stg = 0;
+    infg_level = 0;
+    //kyeenemyno = -1;
+    fastebos = 0;
+    jiki.ccount = 99;
+    p_extend = 200000;
+    pad[0].up=0;
+    pad[0].down=0;
+    pad[0].right=0;
+    pad[0].left=0;
+    pad[0].st=0;
+    pad[0].se=0;
+    opening(joy);
+}
+
+
+void opening(SDL_Joystick *joy)
+{
+    //for (i = 0; i < 300; i++) {
+    //};
+
+    SoundStop();
+    SoundPlay(7);
+
+    while (1) {
+	if(use_keybord == 1) {
+	    keybord();
+	} else {
+	    Pad(joy);
+	}
+
+	count = 1;
+
+	PutSprite(count, 700, 480, 53); //  put `push start' string on screen.  
+	count++;
+	PutSprite(count, 224, 776, 119); //  put `super dandy'                   
+	count++;
+	//    PutSprite(count, 200, 64, 190);
+	//    PutSpriteEx(count, 8192, 8192, 0);
+        PutSpriteEx(190, 800, 264, 2, 2, 5);
+	count++;
+	PutSprite(count, 396, 432, 191);
+	//PutSpriteEx(count, 8192, 8192, 0);
+	count++;
+	PutSprite(count, 640, 640, 192);
+	//PutSpriteEx(count, 8192, 8192, 0);
+
+	if (pad[0].st > 1) {
+	    jiki.bf = TRUE;
+	    
+	    //CdPlay(1,&cdp[0],0);                                          
+	    SoundStop();
+	    SoundPlay(0);
+
+	    gamef = 1;
+	    pad[0].st = 1;
+	    return;
+	}
+	if ((pad[0].se > 0) && (pad[0].st > 0)) {
+	    gamef = 0;
+	    break;
+	}
+
+
+	SDL_GL_SwapBuffers( );
+    }
+}
+
+void
+pause(SDL_Joystick *joy)
+{
+    if (jiki.zanki != 0 && jiki.bf != FALSE) {
+	if (pad[0].se == 1) {
+	    //Mix_Pause(BGM);
+	    PauseSdlMixer(BGM);
+	    while(1){
+		if(use_keybord == 1) {
+		    keybord();
+		} else {
+		    Pad(joy);
+		}
+		if(pad[0].st == 0)
+		    continue;
+		pad[0].up=0;
+		pad[0].down=0;
+		pad[0].right=0;
+		pad[0].left=0;
+		pad[0].se=0;
+		pad[0].st=0;
+		//Mix_Resume(BGM);
+		ResumeSdlMixer(BGM);
+		break;
+	    }
+	}
+    }
+    if (jiki.zanki == 0) {
+	//     RECT *recp;                                                      
+	if ((jiki.ccount > 0) && (cf == 0)) {
+	    cf = 1;
+	    count++;
+	    //cgcg(2);
+	    PutSprite(2, 480, 480, 110);
+	    count++;
+	    //cgcg(1);
+	}
+	if ((jiki.ccount > 0) && (cf == 1)) {
+	    while (1) {
+		if (pad[0].st > 0) {
+		    cf = 0;
+		    jiki.ccount--;
+		    jiki.zanki = 3;
+		    enemycount++;
+		    cc = 0;
+		    for (i = 0; i < 4; i++) {
+			clear_result[i] = 0;
+		    }
+		    goto f;
+		}
+		cc++;
+		if (29 - cc / 60 < 20) {
+		    cc = 0;
+		    cf = 3;
+		    break;
+		}
+		SDL_Delay(100);
+		PutSprite(1, 640, 640, 29 - cc / 60);
+		//      	PutSpriteEx(1, 409 * ((cc % 60) + 1), 409 * ((cc % 60) + 1), 0);
+
+		Pad(joy);
+		SDL_GL_SwapBuffers( );
+	    }
+	}
+	if (rswait > 60 * 6) {
+	    cf = 0;
+	    rswait = 0;
+	    gamesyokika(joy);
+	}
+	rswait++;
+	count++;
+	//cgcg(1);
+	PutSprite(1, 480, 480, 19);
+	return;
+    }
+    if (jiki.bf == FALSE) {
+    f:
+	if (rswait < 80) {
+	    rswait++;
+	    return;
+	} else {
+	    rswait = 0;
+	    jiki.x = 60;
+	    jiki.y = 200;
+	    jiki.bf = TRUE;
+
+	    pad[0].st = 0;
+	    lg.stg = 4096;
+	    pg.stg = 4096;
+	    laser_lv3[0].r = 62;
+	    tlv3[0].r = 0;
+	    tlv3[0].y = -1;
+	    return;
+	    // sb_size = -1;                                                    
+	}
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/move.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,963 @@
+#include <stdlib.h>
+#include <SDL.h>
+//#include "libps2.h"
+#include "move.h"
+#include "Enemy.h"
+#include "count2.h"
+#include "tokuten.h"
+#include "schedule.h"
+#include "bom.h"
+#include "sankaku.h"
+//#include "libps.h"
+#include "sgoex.h"
+#include "atari.h"
+#include"debug.h"
+#include "SDL_opengl.h"
+extern SpriteView spview[MAXOBJ];
+
+
+int tekino0;
+int rinkx;
+int rinky;
+int rinkf1 = 0, rinkf2 = 0;
+int asteroiddt[200];
+int asteroidi = 0;
+int enemyfaste = 0;
+int sf;
+int amari;
+int fastebos = 0;
+
+void asteroid(int tekino);
+
+void Move()
+{
+    int tekino;
+
+    for (tekino = 0; tekino < 100; tekino++) {
+	if (enemy[tekino].f == TRUE) {
+	    if ((enemy[tekino].move != 8) &&
+                (enemy[tekino].move != 9))
+		if (jiki.bf == TRUE)
+		    if (atari(0, tekino)) {
+			Bom(enemy[tekino].x, enemy[tekino].y);
+			enemy[tekino].f = FALSE;
+			enemycount += (enemy[tekino].sc *
+			     ((infg.stg / 128) + infg_level + 1));
+		    }
+	    if (enemy[tekino].f == TRUE);
+	    switch (enemy[tekino].move) {
+	    case 0:
+		enemy[tekino].x += enemy[tekino].sx;
+		enemy[tekino].y += enemy[tekino].sy;
+		break;
+	    case 1:
+		enemy[tekino].x -= enemy[tekino].sx;
+		enemy[tekino].y -= enemy[tekino].sy;
+		break;
+	    case 2:
+		enemy[tekino].sy -= 0.25;
+		enemy[tekino].y += enemy[tekino].sy;
+		break;
+	    case 3:
+		enemy[tekino].x += enemy[tekino].sx;
+		enemy[tekino].y += enemy[tekino].sy;
+		if ((enemy[tekino].dt1 == 60) ||
+                    (enemy[tekino].dt1 == 90) ||
+                    (enemy[tekino].dt1 == 30))
+		    Puttama(0, enemy[tekino].x, enemy[tekino].y);
+		enemy[tekino].dt1++;
+		break;
+	    case 4:
+		enemy[tekino].y += enemy[tekino].sy;
+		enemy[tekino].x += enemy[tekino].sx;
+		if (enemy[tekino].y < jiki.y
+		    && enemy[tekino].y + 16 > jiki.y) {
+		    enemy[tekino].sy = -2;
+		    enemy[tekino].sx =
+			((jiki.x > enemy[tekino].x) ? 4 : -4);
+		    enemy[tekino].move = 7;
+		}
+		break;
+	    case 5:
+		enemy[tekino].y += enemy[tekino].sy;
+		enemy[tekino].x += enemy[tekino].sx;
+		if (enemy[tekino].y + 96 < jiki.y
+		    && enemy[tekino].y + 128 > jiki.y) {
+		    enemy[tekino].sy = -2;
+		    enemy[tekino].sx =
+			((jiki.x > enemy[tekino].x) ? 4 : -4);
+		    enemy[tekino].move = 0;
+		}
+		break;
+	    case 6:
+		enemy[tekino].y += enemy[tekino].sy;
+		enemy[tekino].x += enemy[tekino].sx;
+		if (enemy[tekino].y + 96 < jiki.y
+		    && enemy[tekino].y + 128 > jiki.y) {
+		    enemy[tekino].sy = 2;
+		    enemy[tekino].sx =
+			((jiki.x > enemy[tekino].x) ? 4 : -4);
+		    enemy[tekino].move = 0;
+		}
+		break;
+
+	    case 7:
+		enemy[tekino].x += enemy[tekino].sx;
+		enemy[tekino].y += enemy[tekino].sy;
+		if ((enemy[tekino].dt1 == 60) || (enemy[tekino].dt1 == 90)
+		    || (enemy[tekino].dt1 == 30))
+		    Puttama(1, enemy[tekino].x, enemy[tekino].y);
+		enemy[tekino].dt1++;
+		break;
+////////1面中ボスパターン/////////////////////////////////
+	    case 8:		/*8から11まで登場パターン */
+		if (enemy[tekino].y < 520) {
+		    tekino0 = tekino;
+		    kyeenemyno = tekino;
+		    enemy[tekino].y += enemy[tekino].sy;
+		    count++;
+		    DefSpriteEx(enemy[tekino].charno, 16*4, 32*4);
+		    //		    PutSprite(count, enemy[tekino].x, enemy[tekino].y,
+		    //			      enemy[tekino].charno);
+		    PutSpriteEx(enemy[tekino].charno, enemy[tekino].x*4, enemy[tekino].y*4, 0.2, 0.2, 1);
+		    enemy[tekino].dt1 = 512;
+		    enemy[tekino].s = 0.125;
+		    goto putout;
+		}
+		enemy[tekino].move = 9;
+	    case 9:
+		if (enemy[tekino].s <= 2) {
+		    enemy[tekino].s += 0.05;
+		    enemy[tekino].y -= 12;
+		    count++;
+		    DefSpriteEx(54, 16*4, 32*4);
+		    //		    PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
+		    PutSpriteEx(54, enemy[tekino].x*4, enemy[tekino].y*4, enemy[tekino].s, enemy[tekino].s, 1);
+		    goto putout;
+		}
+		count++;
+		DefSpriteEx(54, 16, 32);
+		//		PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
+		PutSpriteEx(54, enemy[tekino].x, enemy[tekino].y, enemy[tekino].s, enemy[tekino].s, 1);
+
+		rinkx = enemy[tekino].x;
+		rinky = enemy[tekino].y;
+		Putenemy(5, rinkx - 16, rinky - 16, 1, 0, 10);
+		Putenemy(5, rinkx - 16, rinky - 16, -1, 0, 10);
+		enemy[tekino].move = 11;
+		enemy[tekino].dt1 = 8192;
+		goto putout;
+	    case 10:
+		if (enemy[tekino].dt1 < 48) {
+		    enemy[tekino].x += enemy[tekino].sx;
+		    enemy[tekino].y += enemy[tekino].sy;
+		    enemy[tekino].dt1++;
+		    break;
+		}
+		rinkf1 = 1;
+		enemy[tekino].dt1 = rinkx;
+		enemy[tekino].dt2 = rinky;
+		enemy[tekino].move = 13;
+		break;
+	    case 11:
+		if (rinkf1 == 0) {
+		    count++;
+		    DefSpriteEx(54, 16, 32);
+		    //		    PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
+		    PutSpriteEx(54, enemy[tekino].x, enemy[tekino].y, enemy[tekino].s, enemy[tekino].s, 1);
+		    goto putout;
+		}
+		enemy[tekino].dt1 = 0;
+		enemy[tekino].dt2 = 0;
+		enemy[tekino].move = 12;
+		break;
+	    case 12:
+		if (fastebos > 60 * 60) {
+		    if (enemy[tekino].y > 240 + 32)
+			enemy[tekino].f = FALSE;
+		    enemy[tekino].y += 3;
+		    rinky += 3;
+		    count++;
+		    DefSpriteEx(54, 16, 32);
+		    //		    PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
+		    PutSpriteEx(54, enemy[tekino].x, enemy[tekino].y, 2, 2, 1);
+		    goto putout;
+		}
+		if (enemy[tekino].dt1 <= 60) {
+		    if (jiki.x + 15 - rinkx < -5)
+			enemy[tekino].sx = -0.8;
+		    else if (jiki.x + 15 - rinkx > 5)
+			enemy[tekino].sx = +0.8;
+		    else
+			enemy[tekino].sx = 0;
+		    enemy[tekino].x += enemy[tekino].sx;
+		    rinkx = enemy[tekino].x;
+		    rinky = enemy[tekino].y;
+		}
+		if ((enemy[tekino].dt1 > 60) && (enemy[tekino].dt1 <= 70)) {
+		    if (enemy[tekino].dt1 % 2 == 1) {
+			Puttama(0, rinkx - 16, rinky);
+			Puttama(0, rinkx, rinky);
+			Puttama(0, rinkx + 16, rinky);
+		    }
+		}
+		if ((enemy[tekino].dt1 > 180)
+		    && (enemy[tekino].dt1 <= 240)) {
+		    if (enemy[tekino].dt1 % 2 == 1) {
+			rinkf2 = 1;
+			Puttama(2, rinkx - 16, enemy[tekino].y - 32);
+			Puttama(3, rinkx + 32 - 16, enemy[tekino].y - 32);
+		    } else
+			rinkf2 = 0;
+		}
+		if (enemy[tekino].dt1 > 240) {
+		    rinkf2 = 2;
+		}
+		if ((enemy[tekino].dt1 > 240)
+		    && (enemy[tekino].dt1 <= 400)) {
+		    count++;
+		    PutSprite(count, rinkx - 16, rinky + 32,
+			      58 + enemy[tekino].dt1 % 4);
+		}
+		if ((enemy[tekino].dt1 > 300)
+		    && (enemy[tekino].dt1 <= 400)) {
+		    rinkf2 = 3;
+		    if (jiki.x + 15 - rinkx < -5)
+			enemy[tekino].sx = -1;
+		    else if (jiki.x + 15 - rinkx > 5)
+			enemy[tekino].sx = +1;
+		    else
+			enemy[tekino].sx = 0;
+		    enemy[tekino].x += enemy[tekino].sx;
+		    rinkx = enemy[tekino].x;
+		    rinky = enemy[tekino].y;
+		    Puttama(4, rinkx - 8, rinky + 16);
+		}
+		if ((enemy[tekino].dt1 > 400)
+		    && (enemy[tekino].dt1 <= 500)) {
+		    rinkf2 = 4;
+		    if (jiki.x + 15 - rinkx < -5)
+			enemy[tekino].sx = -1;
+		    else if (jiki.x + 15 - rinkx > 5)
+			enemy[tekino].sx = +1;
+		    else
+			enemy[tekino].sx = 0;
+		    enemy[tekino].x += enemy[tekino].sx;
+		    rinkx = enemy[tekino].x;
+		    rinky = enemy[tekino].y;
+		}
+		if (enemy[tekino].dt1 > 500) {
+		    rinkf2 = 5;
+		    if (jiki.x + 15 - rinkx < -5)
+			enemy[tekino].sx = -1;
+		    else if (jiki.x + 15 - rinkx > 5)
+			enemy[tekino].sx = +1;
+		    else
+			enemy[tekino].sx = 0;
+		    enemy[tekino].x += enemy[tekino].sx;
+		    rinkx = enemy[tekino].x;
+		    rinky = enemy[tekino].y;
+		}
+		if (enemy[tekino].dt1 > 600) {
+		    rinkf2 = 0;
+		    enemy[tekino].dt1 = 0;
+		}
+		fastebos++;
+		enemy[tekino].dt1++;
+		count++;
+		DefSpriteEx(54, 16, 32);
+		//		PutSprite(count, enemy[tekino].x, enemy[tekino].y, 54);
+		PutSpriteEx(54, enemy[tekino].x, enemy[tekino].y, 2, 2, 1);
+		goto putout;
+	    case 13:
+		if (enemy[tekino0].f == FALSE) {
+		    Bom(enemy[tekino].x, enemy[tekino].y);
+		    enemy[tekino].f = FALSE;
+		}
+		enemy[tekino].x += rinkx - enemy[tekino].dt1;
+		enemy[tekino].y += rinky - enemy[tekino].dt2;
+		enemy[tekino].dt1 = rinkx;
+		enemy[tekino].dt2 = rinky;
+		if (rinkf2 == 1) {
+		    if (enemy[tekino].x > rinkx) {
+			Puttama(2, enemy[tekino].x + 32, enemy[tekino].y);
+		    }
+		    if (enemy[tekino].x < rinkx) {
+			Puttama(3, enemy[tekino].x, enemy[tekino].y);
+		    }
+		}
+		if (rinkf2 == 4) {
+		    count++;
+		    PutSprite(count, enemy[tekino].x, enemy[tekino].y + 56,
+			      58 + filpcount % 4);
+		}
+		if (rinkf2 == 5) {
+		    if (enemy[tekino].x > rinkx) {
+			Puttama(5, enemy[tekino].x + 8,
+				enemy[tekino].y + 24);
+		    }
+		    if (enemy[tekino].x < rinkx) {
+			Puttama(5, enemy[tekino].x + 8,
+				enemy[tekino].y + 24);
+		    }
+		}
+		break;
+	    case 20:
+		enemy[tekino].x += enemy[tekino].sx;
+		enemy[tekino].y += enemy[tekino].sy;
+		enemy[tekino].sx -= 0.5;	//-=1;
+		enemy[tekino].sy += 0.4;	//+=0.8;
+		break;
+	    case 21:
+		enemy[tekino].x += enemy[tekino].sx;
+		enemy[tekino].y += enemy[tekino].sy;
+		enemy[tekino].sx += 0.5;	//+=1;
+		enemy[tekino].sy += 0.4;	//+=0.8;
+		break;
+///////////ここまで///////////////////////
+	    case 22:
+		sf = rand() % 4;
+		if ((sf == 0) || (sf == 1)) {
+		    enemy[tekino].x = -35;
+		    enemy[tekino].y = rand() % (120 - 35);
+		    enemy[tekino].sx = (rand() % 4 + 1);
+		    enemy[tekino].sy = rand() % 3 - 1;
+		    enemy[tekino].move = 23;
+		}
+		if ((sf == 2)) {
+		    enemy[tekino].x = rand() % 290;
+		    enemy[tekino].y = -30;
+		    enemy[tekino].sx = rand() % 3 - 1;
+		    enemy[tekino].sy = (rand() % 4 + 1);
+		    enemy[tekino].move = 23;
+		}
+		if (sf == 3) {
+		    enemy[tekino].x = 320;
+		    enemy[tekino].y = rand() % (120 - 35);
+		    enemy[tekino].sx = (rand() % 4 + 1) * -1;
+		    enemy[tekino].sy = rand() % 3 - 1;
+		    enemy[tekino].move = 23;
+		}
+		break;
+	    case 23:
+		asteroid(tekino);
+		break;
+		////////////////////////////////////////
+	    case 24:
+		kyeenemyno = tekino;
+		tekino0 = 0;
+		rinkx = 0;
+		rinky = 0;
+		rinkf1 = 0;
+		rinkf2 = 0;
+		enemy[tekino].move = 25;
+		break;
+	    case 25:
+		if (enemy[tekino].dt1 <= 360) {
+		    enemy[tekino].x =
+			Mycos(enemy[tekino].dt1) * 30 / SANKAKU + 82 + 32;
+		    enemy[tekino].y =
+			Mysin(enemy[tekino].dt1) * 30 / SANKAKU + 30;
+		}
+		if (enemy[tekino].dt1 > 360) {
+		    enemy[tekino].x =
+			Mycos(enemy[tekino].dt1) * 30 * -1 / SANKAKU +
+			142 + 32;
+		    enemy[tekino].y =
+			Mysin(enemy[tekino].dt1) * 30 / SANKAKU + 30;
+		}
+		count++;
+		PutSprite(count, enemy[tekino].x - 42, enemy[tekino].y,
+			  64);
+		amari = rand() % 160;
+		if ((amari == 1) && (enemy[kyeenemyno + 5].f == TRUE)) {
+		    enemy[tekino].move = 26;	//バルカンパターン
+		    rinkf1 = 1;
+		}
+		if ((amari == 2) && (enemy[kyeenemyno + 1].f == TRUE)) {
+		    enemy[tekino].move = 27;	//ロケットパンチパターン
+		    rinkf1 = 5;
+		    rinkx = 0;
+		    break;
+		}
+		if ((enemy[kyeenemyno + 5].f != TRUE)
+		    && (enemy[kyeenemyno + 1].f != TRUE))
+		    enemy[tekino].move = 28;
+		enemy[tekino].dt1 += 3;
+		if (enemy[tekino].dt1 == 720)
+		    enemy[tekino].dt1 = 0;
+		break;
+	    case 26:		//バルカンパターン
+		if ((enemy[tekino].dt2 > 50) && (enemy[tekino].dt2 < 100)) {
+		    rinkf1 = 2;
+		}
+		if (enemy[tekino].dt2 > 100)
+		    rinkf1 = 3;
+		if (enemy[tekino].dt2 == 400)
+		    rinkf1 = 4;
+		count++;
+		PutSprite(count, enemy[tekino].x - 42, enemy[tekino].y,
+			  64);
+		if (enemy[tekino].dt2 == 401) {
+		    enemy[tekino].dt2 = 0;
+		    rinkf1 = 0;
+		    enemy[tekino].move = 25;
+		    break;
+		}
+		enemy[tekino].dt2++;
+		break;
+	    case 27:		//ロケットパンチパターン
+		if ((enemy[tekino].dt2 > 50) && (enemy[tekino].dt2 < 60)
+		    && (enemy[tekino].x > -24)
+		    && (enemy[tekino].y > -24)) {
+		    rinkf1 = 6;
+		    rinkx -= 4;
+		    enemy[tekino].x -= 4;
+		    enemy[tekino].y -= 4;
+		}
+		if (enemy[tekino].dt2 == 80) {
+		    rinkf1 = 7;
+		}
+		if (enemy[tekino].dt2 == 81) {
+		    rinkf1 = 8;
+		}
+		if (enemy[tekino].dt2 == 124) {
+		    rinkf1 = 9;
+		}
+
+		if (enemy[tekino].dt2 == 400) {
+		    rinkf1 = 10;
+		}
+		if (enemy[tekino].dt2 == 444) {
+		    rinkf1 = 11;
+		}
+		if (enemy[tekino].dt2 == 500) {
+		    rinkf1 = 12;
+		}
+		if ((enemy[tekino].dt2 > 80) && (enemy[tekino].dt2 < 200))
+		    if ((rinkx != 0) && (enemy[tekino].dt2 % 2 == 1)) {
+			rinkx++;
+			enemy[tekino].x++;
+			enemy[tekino].y++;
+		    }
+		count++;
+		PutSprite(count, enemy[tekino].x - 32, enemy[tekino].y, 6);
+		if (rinkf1 == 12) {
+		    enemy[tekino].dt2 = 0;
+		    rinkf1 = 0;
+		    rinkx = 0;
+		    enemy[tekino].move = 25;
+		    break;
+		}
+		enemy[tekino].dt2++;
+		break;
+	    case 28:
+		if (enemy[tekino].dt1 <= 360) {
+		    enemy[tekino].x =
+			Mycos(enemy[tekino].dt1) * 30 / SANKAKU + 82 + 32;
+		    enemy[tekino].y =
+			Mysin(enemy[tekino].dt1) * 30 / SANKAKU + 30;
+		}
+		if (enemy[tekino].dt1 > 360) {
+		    enemy[tekino].x =
+			Mycos(enemy[tekino].dt1) * 30 * -1 / SANKAKU +
+			142 + 32;
+		    enemy[tekino].y =
+			Mysin(enemy[tekino].dt1) * 30 / SANKAKU + 30;
+		}
+		count++;
+		PutSprite(count, enemy[tekino].x - 42, enemy[tekino].y,
+			  64);
+		if (enemy[tekino].dt1 % 30 == 3)
+		    Putenemy(24, enemy[tekino].x + 14,
+			     enemy[tekino].y + 14,
+			     (rand() % 5 + 0.5) * (rand() % 2 ==
+						   1 ? -1 : 1),
+			     (rand() % 5 + 0.5) * (rand() % 2 ==
+						   1 ? -1 : 1), 29);
+		enemy[tekino].dt1 += 3;
+		break;
+	    case 29:
+		enemy[tekino].x += enemy[tekino].sx;
+		enemy[tekino].y += enemy[tekino].sy;
+		if (enemy[tekino].dt1 % 18 == 1)
+		    Puttama(0, enemy[tekino].x, enemy[tekino].y);
+		enemy[tekino].dt1++;
+		break;
+	    case 30:		//本体
+		enemy[tekino].x = enemy[kyeenemyno].x - 32;
+		enemy[tekino].y = enemy[kyeenemyno].y;
+		break;
+	    case 31:		//右腕
+		if ((enemy[kyeenemyno + 3].f == FALSE)
+		    || (kyeenemyno == -1)) {
+		    Bom(enemy[tekino].x, enemy[tekino].y);
+		    enemy[tekino].f = FALSE;
+		    break;
+		}
+
+		if (rinkf1 == 0) {
+		    enemy[tekino].x = enemy[kyeenemyno].x + 40;
+		    enemy[tekino].y = enemy[kyeenemyno].y + 28;
+		    enemy[tekino].dt2 = 0;
+		}
+		if (rinkf1 == 5) {
+		    enemy[tekino].x = enemy[kyeenemyno].x + 52;
+		    enemy[tekino].y = enemy[kyeenemyno].y;
+		    count++;
+		    PutSprite(count, enemy[tekino].x - 4,
+			      enemy[tekino].y - 20,
+			      80 + enemy[tekino].dt2 % 4);
+		    enemy[tekino].dt2++;
+		}
+		if (rinkf1 == 6) {
+		    if (enemy[tekino].y < 240 - 48) {
+			enemy[tekino].y += 6;
+		    } else {
+			//              rinkf1=7;
+			break;
+		    }
+		    count++;
+		    PutSprite(count, enemy[tekino].x - 4,
+			      enemy[tekino].y - 20,
+			      90 + enemy[tekino].dt2 % 4);
+		    enemy[tekino].dt2++;
+		}
+		if (rinkf1 == 7) {
+		    Putenemy(22, enemy[tekino].x + 14,
+			     enemy[tekino].y + 14, 0, 0, 40);
+		    //      rinkf1=8;
+		    break;
+		}
+		if (rinkf1 == 11) {
+		    if (enemy[kyeenemyno].y + 20 != enemy[tekino].y) {
+			enemy[tekino].y--;
+		    } else {
+			//              rinkf1=12;
+			break;
+		    }
+		    count++;
+		    PutSprite(count, enemy[tekino].x + 8,
+			      enemy[tekino].y + 44,
+			      58 + enemy[tekino].dt2 % 4);
+		    enemy[tekino].dt2++;
+		}
+		break;
+	    case 32:		//左腕
+		if ((enemy[kyeenemyno + 4].f == FALSE)
+		    || (kyeenemyno == -1)) {
+		    Bom(enemy[tekino].x, enemy[tekino].y);
+		    enemy[tekino].f = FALSE;
+		    break;
+		}
+		enemy[tekino].x = enemy[kyeenemyno].x - 40;
+		enemy[tekino].y = enemy[kyeenemyno].y + 28;
+		if (rinkf1 == 5) {
+		    enemy[tekino].x = enemy[kyeenemyno].x - 24 + 4;
+		    enemy[tekino].y = enemy[kyeenemyno].y + 28;
+		    enemy[tekino].charno = enemystate[20].charno;
+		}
+		if (rinkf1 == 11) {
+		    enemy[tekino].charno = enemystate[14].charno;
+		}
+		if (rinkf1 == 7) {
+		    Putenemy(23, enemy[tekino].x + 14,
+			     enemy[tekino].y + 14, 0, 0, 41);
+		    //      rinkf1=8;
+		    break;
+		}
+		break;
+	    case 33:		//右肩
+		if ((enemy[kyeenemyno].f == FALSE) || (kyeenemyno == -1)) {
+		    Bom(enemy[tekino].x, enemy[tekino].y);
+		    enemy[tekino].f = FALSE;
+		}
+		enemy[tekino].x = enemy[kyeenemyno].x + 32;
+		enemy[tekino].y = enemy[kyeenemyno].y;
+		if (rinkf1 == 5) {
+		    enemy[tekino].x = enemy[kyeenemyno].x + 32 - 4;
+		    enemy[tekino].y = enemy[kyeenemyno].y;
+		    enemy[tekino].charno = enemystate[19].charno;
+		}
+		if (rinkf1 == 6) {
+		    enemy[tekino].charno = enemystate[11].charno;
+		}
+		break;
+	    case 34:		//左肩
+		if ((enemy[kyeenemyno].f == FALSE) || (kyeenemyno == -1)) {
+		    Bom(enemy[tekino].x, enemy[tekino].y);
+		    enemy[tekino].f = FALSE;
+		}
+		enemy[tekino].x = enemy[kyeenemyno].x - 32;
+		enemy[tekino].y = enemy[kyeenemyno].y;
+		if (rinkf1 == 5) {
+		    enemy[tekino].charno = enemystate[21].charno;
+		}
+		if (rinkf1 == 6) {
+		    enemy[tekino].charno = enemystate[12].charno;
+		}
+		break;
+	    case 35:		//胸
+		if (kyeenemyno == -1) {
+		    Bom(enemy[tekino].x, enemy[tekino].y);
+		    enemy[tekino].f = FALSE;
+		}
+		enemy[tekino].x = enemy[kyeenemyno].x;
+		enemy[tekino].y = enemy[kyeenemyno].y + 32;
+		if (rinkf1 == 1) {
+		    enemy[tekino].charno = enemystate[16].charno;
+		}
+		if (rinkf1 == 2) {
+		    count++;
+		    PutSprite(count, enemy[tekino].x - 10,
+			      enemy[tekino].y + 16,
+			      58 + enemy[tekino].dt2 % 4);
+		    count++;
+		    PutSprite(count, enemy[tekino].x + 10,
+			      enemy[tekino].y + 16,
+			      58 + enemy[tekino].dt2 % 4);
+		    enemy[tekino].dt2++;
+		}
+		if (rinkf1 == 3) {
+		    count++;
+		    PutSprite(count, enemy[tekino].x - 10,
+			      enemy[tekino].y + 16,
+			      58 + enemy[tekino].dt2 % 4);
+		    count++;
+		    PutSprite(count, enemy[tekino].x + 10,
+			      enemy[tekino].y + 16,
+			      58 + enemy[tekino].dt2 % 4);
+		    if (enemy[tekino].dt2 % 20 == 1) {
+			Puttama(7, enemy[tekino].x, enemy[tekino].y + 16);
+			Puttama(7, enemy[tekino].x + 20,
+				enemy[tekino].y + 16);
+		    }
+		    enemy[tekino].dt2++;
+		}
+		if (rinkf1 == 4) {
+		    enemy[tekino].charno = enemystate[15].charno;
+		    enemy[tekino].dt2 = 0;
+		}
+		break;
+	    case 40:		//アームバルカン
+		if (enemy[kyeenemyno + 1].f == FALSE) {
+		    Bom(enemy[tekino].x, enemy[tekino].y);
+		    enemy[tekino].f = FALSE;
+		}
+		if ((rinkf1 == 8) && (enemy[tekino].dt1 % 3 == 1)) {
+		    if ((enemy[tekino].dt2 < 16)) {
+			enemy[tekino].dt2++;
+			DefSprite(76, 1, 112, 0, 16, enemy[tekino].dt2,
+				  480);
+		    } else {
+			//                                  rinkf1=9;
+			break;
+		    }
+		}
+		if (rinkf1 == 9) {
+		    if (enemy[tekino].dt1 % 15 == 1) {
+			Puttama(8, enemy[tekino].x, enemy[tekino].y);
+		    }
+		}
+		if (rinkf1 == 10) {
+		    if (enemy[tekino].dt2 != 0) {
+			enemy[tekino].dt2--;
+			DefSprite(76, 1, 112, 0, 16, enemy[tekino].dt2,
+				  480);
+		    } else {
+			enemy[tekino].f = FALSE;
+			//          rinkf1=11;
+		    }
+		}
+		enemy[tekino].dt1++;
+		break;
+	    case 41:		//左腕アップアームバルカン
+		if (enemy[kyeenemyno + 2].f == FALSE) {
+		    Bom(enemy[tekino].x, enemy[tekino].y);
+		    enemy[tekino].f = FALSE;
+		}
+		enemy[tekino].x = enemy[kyeenemyno].x - 20 - 7;
+		enemy[tekino].y = enemy[kyeenemyno].y + 28 + 15;
+		if ((rinkf1 == 8) && (enemy[tekino].dt1 % 3 == 1)) {
+		    if ((enemy[tekino].dt2 < 16)) {
+			enemy[tekino].dt2++;
+			DefSprite(77, 1, 112, 16, enemy[tekino].dt2, 16, 480);	/*左腕アップアーム砲 */
+		    } else {
+			rinkf1 = 9;
+			break;
+		    }
+		}
+		if (rinkf1 == 9) {
+		    if (enemy[tekino].dt1 % 15 == 1) {
+			Puttama(9 + rand() % 2, enemy[tekino].x,
+				enemy[tekino].y);
+		    }
+		}
+		if (rinkf1 == 10) {
+		    if (enemy[tekino].dt2 != 0) {
+			enemy[tekino].dt2--;
+			DefSprite(77, 1, 112, 16, enemy[tekino].dt2, 16,
+				  480);
+		    } else {
+			enemy[tekino].f = FALSE;
+			//          rinkf1=11;
+		    }
+		}
+		enemy[tekino].dt1++;
+		break;
+	    case 400:
+		enemy[tekino].sy++;
+		enemy[tekino].y += enemy[tekino].sy / 4;
+		break;
+	    case 401:
+		enemy[tekino].sx++;
+		enemy[tekino].x += enemy[tekino].sx / 8;
+		if (enemy[tekino].x > (jiki.x - 32)) {
+		    enemy[tekino].sy--;
+		}
+		enemy[tekino].y += enemy[tekino].sy / 8;
+		if (enemy[tekino].dt1 % 50 == 37) {
+		    Puttama(1, enemy[tekino].x + 8, enemy[tekino].y + 24);
+		}
+		enemy[tekino].dt1++;
+		break;
+	    case 402:
+		enemy[tekino].sx--;
+		enemy[tekino].x += enemy[tekino].sx / 8;
+		if (enemy[tekino].x < (jiki.x + 32)) {
+		    enemy[tekino].sy--;
+		}
+		enemy[tekino].y += enemy[tekino].sy / 8;
+		if (enemy[tekino].dt1 % 50 == 37) {
+		    Puttama(1, enemy[tekino].x + 8, enemy[tekino].y + 24);
+		}
+		enemy[tekino].dt1++;
+		break;
+	    case 410:
+		kyeenemyno = tekino;
+	    case 411:
+		if (enemy[tekino].dt2 > 356)
+		    enemy[tekino].sx = -1;
+		if (enemy[tekino].dt2 < -398)
+		    enemy[tekino].sx = 1;
+		if ((enemy[tekino].dt1) % 62 == 0)
+		    Putenemy(41,
+			     enemy[tekino].x,
+			     enemy[tekino].y,
+			     (int) -Mycos(enemy[tekino].dt1 / 16) * 4 /
+			     SANKAKU,
+			     (int) -Mysin(enemy[tekino].dt1 / 16) * 4 /
+			     SANKAKU, 7);
+		if ((enemy[tekino].dt1) % 13 == 0)
+		    Puttama(11, enemy[tekino].x + 32,
+			    enemy[tekino].y + 32);
+
+		enemy[tekino].dt2 += enemy[tekino].sx;
+		enemy[tekino].dt1 += enemy[tekino].dt2 / 4;
+
+		enemy[tekino].x = jiki.x - 16 +
+		    Mycos(enemy[tekino].dt1 / 16) * 128 / SANKAKU;
+		enemy[tekino].y = jiki.y - 16 +
+		    Mysin(enemy[tekino].dt1 / 16) * 128 / SANKAKU;
+		if (enemy[tekino].x < 0)
+		    enemy[tekino].x = 0;
+		if (enemy[tekino].x > 260)
+		    enemy[tekino].x = 260;
+		if (enemy[tekino].y < 0)
+		    enemy[tekino].y = 0;
+		if (enemy[tekino].y > 232)
+		    enemy[tekino].y = 232;
+		break;
+	    case 500:
+	      enemy[tekino].s = 0;
+
+		kyeenemyno = tekino;
+		enemy[tekino].dt2++;
+		enemy[tekino].dt2 %= 512;
+		enemy[tekino].dt1++;
+		count++;
+		DefSpriteEx(100, 16, 16);
+		//		PutSprite(count, enemy[tekino].x + 16,
+		//  enemy[tekino].y + 16, 100);
+		PutSpriteEx(100, enemy[tekino].x + 16, enemy[tekino].y + 16, 2, 2, enemy[tekino].dt1);
+
+		if (enemy[tekino].dt1 % (5 + enemy[tekino].dt2 / 8) == 1) {
+		    if (rand() % 2 == 1)
+			Putenemy(24, enemy[tekino].x, enemy[tekino].y,
+				 (rand() % 5 + 0.5) * (rand() % 2 ==
+						       1 ? -1 : 1),
+				 (rand() % 5 + 0.5) * (rand() % 2 ==
+						       1 ? -1 : 1), 501);
+		    else
+			Putenemy(rand() % 2 + 1, enemy[tekino].x,
+				 enemy[tekino].y,
+				 (int) Mycos(enemy[tekino].dt1 / 4) * 4 /
+				 SANKAKU,
+				 (int) -Mysin(enemy[tekino].dt1 / 4) * 4 /
+				 SANKAKU, 501);
+		}
+		if (enemy[tekino].dt1 == 50) {
+		    /*Putenemy(44,0,0,1,1,411); */
+		}
+		goto putout;
+	    case 501:
+		enemy[tekino].x += enemy[tekino].sx;
+		enemy[tekino].y += enemy[tekino].sy;
+		if (enemy[tekino].dt1 % 32 == 1)
+		    Puttama(11, enemy[tekino].x, enemy[tekino].y);
+		enemy[tekino].dt1++;
+		break;
+	    case 600:
+		kyeenemyno = tekino;
+		enemy[tekino].dt1 += 30;
+		enemy[tekino].dt2++;
+		enemy[tekino].dt1 %= 360;
+		enemy[tekino].x += Mycos(enemy[tekino].dt1) * 4 / SANKAKU;
+		enemy[tekino].y += Mysin(enemy[tekino].dt1) * 4 / SANKAKU;
+		Puttama(11, enemy[tekino].x + 16, enemy[tekino].y + 16);
+		Puttama(11, enemy[tekino].x + 32, enemy[tekino].y + 48);
+		Puttama(11, enemy[tekino].x + 48, enemy[tekino].y + 16);
+		if (enemy[tekino].dt2 > 240)
+		    enemy[tekino].move = 601;
+		if (enemy[tekino].x < 0)
+		    enemy[tekino].x = 0;
+		if (enemy[tekino].x > 260)
+		    enemy[tekino].x = 260;
+		if (enemy[tekino].y < 0)
+		    enemy[tekino].y = 0;
+		if (enemy[tekino].y > 232)
+		    enemy[tekino].y = 232;
+		break;
+	    case 601:
+		enemy[tekino].dt2++;
+		if (enemy[tekino].x < jiki.x)
+		    enemy[tekino].sx++;
+		if (enemy[tekino].x > jiki.x)
+		    enemy[tekino].sx--;
+		enemy[tekino].x += enemy[tekino].sx;
+		Putenemy(6, enemy[tekino].x + 16 + rand() % 32,
+			 enemy[tekino].y, 0, rand() % 4, 400);
+		if (enemy[tekino].x < 0)
+		    enemy[tekino].x = 0;
+		if (enemy[tekino].x > 260)
+		    enemy[tekino].x = 260;
+		if (enemy[tekino].y < 0)
+		    enemy[tekino].y = 0;
+		if (enemy[tekino].y > 232)
+		    enemy[tekino].y = 232;
+		if (enemy[tekino].dt2 > 800) {
+		    enemy[tekino].move = 602;
+		}
+		break;
+	    case 602:
+		enemy[tekino].dt2++;
+		Putenemy(24, enemy[tekino].x + 14, enemy[tekino].y + 14,
+			 (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
+			 (rand() % 5 + 0.5) * (rand() % 2 == 1 ? -1 : 1),
+			 29);
+		if (enemy[tekino].dt2 > 1024) {
+		    enemy[tekino].move = 600;
+		    enemy[tekino].dt2 = 0;
+		}
+		break;
+	    }
+	    if ((enemy[tekino].y > 964 + 32)
+		|| (enemy[tekino].x > 1688 + 50)
+		|| (enemy[tekino].y < 0 - 128)
+		|| (enemy[tekino].x < 0 - 200)) {
+		enemy[tekino].f = FALSE;
+	    }
+	    count++;
+	    PutSprite(count, enemy[tekino].x, enemy[tekino].y,
+		      enemy[tekino].charno);
+	}
+      putout:;
+    }
+    asteroidi = 0;
+}
+void asteroid(int tekino)
+{
+    int i;
+
+    asteroiddt[asteroidi] = tekino;
+    //            if(asteroidi==0)
+    //            {
+    enemy[tekino].x += enemy[tekino].sx;
+    enemy[tekino].y += enemy[tekino].sy;
+    //            }
+    if (asteroidi > 0) {
+	for (i = 0; i < asteroidi; i++) {
+	    if ((enemy[asteroiddt[i]].x + 32 > enemy[tekino].x)
+		&& (enemy[tekino].x + 32 > enemy[asteroiddt[i]].x)
+		&& (enemy[asteroiddt[i]].y + 32 > enemy[tekino].y)
+		&& (enemy[asteroiddt[i]].y < enemy[tekino].y + 32)) {
+		enemy[tekino].sx *= -1;
+		enemy[tekino].sy *= -1;
+	    }
+	}
+    }
+    asteroidi++;
+}
+
+void charpatern()
+{
+  /*
+    GsSPRITE gt;
+    SpriteView st;
+    int counttag;
+    counttag = count;
+    enemyfaste++;
+    while (counttag > enemyfaste) {
+	st = spview[counttag];
+	gt = sprite[counttag];
+	sprite[counttag] = sprite[enemyfaste];
+	spview[counttag] = spview[enemyfaste];
+	sprite[enemyfaste] = gt;
+	spview[enemyfaste] = st;
+	counttag--;
+	enemyfaste++;
+    }
+  */
+}
+void cgcg(int p)
+{
+  /*
+    GsSPRITE gt;
+    SpriteView st;
+    int counttag;
+    counttag = count;
+
+    st = spview[counttag];
+    gt = sprite[counttag];
+    sprite[counttag] = sprite[p];
+    spview[counttag] = spview[p];
+    sprite[p] = gt;
+    spview[p] = st;
+*/
+}
+
+void bosguage()
+{
+  int h;
+    float py;
+    float wariai1, wariai2;
+    if (kyeenemyno != -1) {
+	if (stage == 0)
+	    h = 4;
+	if (stage == 1)
+	    h = 18;
+	if (stage == 2)
+	    h = 44;
+	if (stage == 3)
+	    h = 30;
+	if (stage == 4)
+	    h = 49;
+	wariai2 = enemy[kyeenemyno].p;
+	wariai1 = wariai2 / enemystate[h].p;
+	py = 186.0 * wariai1;
+	DefSprite(94, 3, 48, 64 + (186 - py), 16, py, 480);
+	count++;
+		//	PutSprite(count, 320 - 16, 220 - py, 94);
+		PutSpriteEx(94, 1500, 1100 - py, 4, 4, 0);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/move.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,14 @@
+#ifndef _MOVE_H_
+#define _MOVE_H_
+
+extern void asteroid(int tekino);
+extern void charpatern();
+extern void bosguage();
+extern void Move();
+
+extern int fastebos;
+extern void cgcg(int p);
+extern void charpatern();
+
+extern int enemyfaste;
+#endif				//_MOVE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/object.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libxml/parser.h>
+#include "object.h"
+
+void init_object(OBJECT *obj)
+{
+  obj->name = NULL;
+  obj->surfaces = NULL;
+}
+
+void free_object(OBJECT *obj)
+{
+  SURFACE *cur,*next;
+
+  if (obj == NULL)
+    {
+      printf("obj is NULL\n");
+      return;
+    }
+  for(cur=obj->surfaces;cur;cur=next)
+    {
+      next = cur->next;
+      free(cur);
+    }
+  free(obj->free_me);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/object.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,40 @@
+typedef float FVECTOR[4];
+typedef float FMATRIX[4][4];
+
+typedef struct width_height{
+  short w;
+  short h;
+} WX;;
+
+typedef struct surface {
+  int size;
+  char *name;
+  char *parent_name;
+  short w;
+  short h;
+  FVECTOR *data[4];
+  FVECTOR xyz;
+  FVECTOR angle;
+  int *texture;         // pointer of this surface's texture
+  char *image_name;
+  struct surface *next;
+  struct surface *child;
+  struct surface *parent;
+  struct surface *brother;
+} SURFACE;
+
+typedef struct object {
+  FVECTOR xyz;              // position
+  FVECTOR angle;            // angle
+  FMATRIX transfer;         // transfer matrix
+  char *name;               // object's name
+  char *free_me;            // pointer for free myself
+  SURFACE *surfaces;
+} OBJECT;
+
+void init_object(OBJECT *obj);
+void free_object(OBJECT *obj);
+OBJECT *font;
+OBJECT *chara;
+OBJECT *effect;
+OBJECT *boss;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/profile.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,61 @@
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+#include<sys/time.h>
+#include<unistd.h>
+#include"profile.h"
+
+static unsigned long timeprof_overhead;
+
+#define timeprof_get_time(t) {\
+    struct timeval t0;\
+    gettimeofday(&t0,NULL);\
+    (t).sec=t0.tv_sec;\
+    (t).usec=t0.tv_usec;}
+
+void timeprof_begin(Timeprof t)
+{
+    timeprof_get_time(t->begin);
+}
+
+int timeprof_end(Timeprof t)
+{
+    unsigned int etime;
+    timeprof_get_time(t->end);
+    if (t->begin.usec > t->end.usec) {
+	t->end.usec += 1000000;
+	t->end.sec--;
+    }
+    etime = ((t->end.sec - t->begin.sec) * 1000000 +
+	     (t->end.usec - t->begin.usec)) - timeprof_overhead;
+    if (etime > t->peak) {
+	t->peak = etime;
+    }
+    if (t->average > 0) {
+	t->average += etime;
+	t->average /= 2;
+    } else {
+	t->average = etime;
+    }
+    return etime;
+}
+
+void timeprof_sprint(char *s, char *profname, Timeprof t)
+{
+    sprintf(s, "%s: average:%dusec, peak:%dusec", profname, t->average,
+	    t->peak);
+}
+
+void timeprof_init()
+{
+    struct time_profile t;
+    timeprof_begin(&t);
+    timeprof_overhead = timeprof_end(&t);
+}
+
+Timeprof timeprof_new()
+{
+    Timeprof t = malloc(sizeof(struct time_profile));
+    memset(t, 0, sizeof(struct time_profile));
+    return t;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/profile.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,20 @@
+typedef struct {
+    unsigned int sec;
+    unsigned int usec;
+} mysec;
+
+typedef struct time_profile {
+    mysec begin, end;
+    unsigned int average;
+    unsigned int peak;
+} *Timeprof;
+
+extern Timeprof timeprof_new();
+// extern unsigned long timeprof_get(Timeprof t);
+extern void timeprof_sprint(char *s, char *profname, Timeprof t);
+
+//  #define timeprof_begin(t) timeprof_set_point(&((t)->begin))
+//  #define timeprof_end(t) timeprof_set_point(&((t)->end))
+
+extern void timeprof_begin(Timeprof t);
+extern int timeprof_end(Timeprof t);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sankaku.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,42 @@
+#include <math.h>
+#include "sankaku.h"
+
+#define SANKAKU 100000
+
+int mysin[181];
+int mycos[181];
+
+void sankakuf()
+{
+    int i;
+    for (i = 0; i < 181; i++) {
+	mysin[i] = sin(i / 360.0 * pi2) * SANKAKU;
+    }
+    for (i = 0; i < 181; i++) {
+	mycos[i] = cos(i / 360.0 * pi2) * SANKAKU;
+    }
+}
+
+int Mycos(int c)
+{
+    c %= 360;
+    if (c < 0)
+	c += 360;
+    if ((c <= 180))
+	return (mycos[c]);
+    if (c > 180)
+	return (mycos[180 - (c - 180)]);
+    return (0);
+}
+
+int Mysin(int c)
+{
+    c %= 360;
+    if (c < 0)
+	c += 360;
+    if (c <= 180)
+	return (mysin[c]);
+    if (c > 180)
+	return (mysin[180 - (c - 180)] * -1);
+    return (0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sankaku.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,11 @@
+#include <math.h>
+
+#define SANKAKU 100000
+int mysin[181];
+int mycos[181];
+
+static const double pi2 = M_PI * 2.0;
+
+extern void sankakuf();
+extern int Mycos(int c);
+extern int Mysin(int c);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/schedule.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,8 @@
+#ifndef _SCHEDULE_H_
+#define _SCHEDULE_H_
+
+//extern int kyeenemyno;
+
+extern void schedule();
+
+#endif				// _SCHEDULE_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/schedule3.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,724 @@
+#include <stdlib.h>
+#include <SDL.h>
+#include "bool.h"
+#include "schedule.h"
+#include "Character.h"
+#include "Character_state.h"
+#include "sound.h"
+#include "bom.h"
+#include "tokuten.h"
+#include "count2.h"
+//#include "libps.h"
+#include"debug.h"
+#include "SDL_opengl.h"
+enum {
+    FRAME_RATE = 32,
+};
+
+/*enemy schedule*/
+//int kyeenemyno = -1;
+void schedule()
+{
+  CHARACTER *p;
+    int i;
+    if (stage == 0)
+    {
+	switch (filpcount) {
+	case 1:
+	    SoundStop();
+	    SoundPlay(0);
+	    break;
+
+	case FRAME_RATE * 2:
+	    Putenemy(1, 120, -128, 0, 4, chara_state0);
+	    break;
+	case FRAME_RATE * 3:
+	  Putenemy(1, 56, -128, 0, 8, chara_state0);
+	  Putenemy(1, 184, -128, 0, 8, chara_state0);
+	    break;
+	case FRAME_RATE * 4:
+	    Putenemy(1, 120, -128, 0, 4, chara_state0);
+	    break;
+	case FRAME_RATE * 5:
+	    Putenemy(1, 224, -128, 1, 1, chara_state0);
+	    Putenemy(1, 184, -128, 1, 1, chara_state0);
+	    break;
+	case FRAME_RATE * 6:
+	    Putenemy(1, 120, -128, 1, 2, chara_state0);
+	    break;
+	case FRAME_RATE * 7:
+	    Putenemy(1, 56, -128, 0, 1, chara_state0);
+	    Putenemy(1, 184, -128, 0, 1, chara_state0);
+	    break;
+	case FRAME_RATE * 8:
+	    Putenemy(2, 120, -128, 0, 1, chara_state0);
+	    break;
+
+	case FRAME_RATE * 12:
+	    Putenemy(1, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 13:
+	    Putenemy(1, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 14:
+	    Putenemy(1, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 15:
+	    Putenemy(2, 1280 - 128 - 120, -128, -1, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 16:
+	    Putenemy(2, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 17:
+	    Putenemy(2, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 18:
+	    Putenemy(1, 1280 - 128 - 120, -32, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 128, -128, -2, 1, chara_state4);
+	    Putenemy(1, 800, -88, -1, 1, chara_state4);
+	    break;
+
+	case FRAME_RATE * 24:
+	    Putenemy(1, 256, -128, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 256 - 128, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 25:
+	    Putenemy(2, 512, -128, 0, 1, chara_state4);
+	    Putenemy(2, 1280 - 128, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 26:
+	    Putenemy(1, 384, -128, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 256, -128, 0, 2, chara_state4);
+	    Putenemy(1, 512, -128, 0, 3, chara_state4);
+	    Putenemy(1, 1280 - 256, -128, 0, 2, chara_state4);
+	    break;
+	case FRAME_RATE * 27:
+	    Putenemy(2, 512, -128, 0, 3, chara_state2);
+	    Putenemy(2, 256 - 128, -128, 0, 2, chara_state2);
+	    Putenemy(2, 768, -128, 0, 4, chara_state2);
+	    Putenemy(2, 128, -128, 0, 3, chara_state2);
+	    break;
+	case FRAME_RATE * 28:
+	    Putenemy(1, 256, -128, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 256 - 128, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 29:
+	    Putenemy(2, 256, -128, 0, 1, chara_state4);
+	    Putenemy(2, 1280 - 256 - 128, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 30:
+	    Putenemy(1, 256, -128, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 256 - 128, -128, 0, 1, chara_state4);
+	    break;
+
+	case FRAME_RATE * 33:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state5);//5/22/pm5:300
+	    break;
+	case FRAME_RATE * 34:
+	    Putenemy(2, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(2, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 35:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 36:
+	    Putenemy(2, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(2, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 37:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 38:
+	    Putenemy(2, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(2, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 39:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+
+	case FRAME_RATE * 50:
+	    Putenemy(40, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 46:
+	    Putenemy(40, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 54:
+	    Putenemy(40, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state3);
+	    break;
+
+	case FRAME_RATE * 60:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 61:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 62:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 63:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 64:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 65:
+	    Putenemy(40, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(40, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+
+	case FRAME_RATE * 80:
+	    Putenemy(42, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 66:
+	    Putenemy(41, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 84:
+	    Putenemy(42, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 70:
+	    Putenemy(41, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 88:
+	    Putenemy(42, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 74:
+	    Putenemy(41, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 92:
+	    Putenemy(42, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 78:
+	    Putenemy(41, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+
+	case FRAME_RATE * 100:
+	    Putenemy(41, 256, -128, 0, 1, chara_state7);
+	    Putenemy(41, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 81:
+	    Putenemy(42, 256, -128, 0, 1, chara_state7);
+	    Putenemy(42, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 104:
+	    Putenemy(41, 256, -128, 0, 1, chara_state7);
+	    Putenemy(41, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 83:
+	    Putenemy(42, 256, -128, 0, 1, chara_state7);
+	    Putenemy(42, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 108:
+	    Putenemy(41, 256, -128, 0, 1, chara_state7);
+	    Putenemy(41, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 85:
+	    Putenemy(42, 256, -128, 0, 1, chara_state7);
+	    Putenemy(42, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 112:
+	    Putenemy(41, 256, -128, 0, 1, chara_state7);
+	    Putenemy(41, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+
+	case FRAME_RATE * 130:
+	    SoundStop();
+	    SoundPlay(4);
+	    for(p = active_chara_list;p!=NULL;p=p->next)
+	      {
+		p->f = FALSE;
+		p->state = delete_chara;
+		p->collision = noaction;
+	      }
+	    Putenemy(4, 520, -128, 0, 1, chara_state8);	// 1面ボスをPutenemy
+	}			//case文
+
+	//kyeenemynoはenemyオブジェクトのID。
+	//ボスが登場していないときはkyeenemynoに-1がセットされる。
+	//move.cではenemyオブジェクトのIDはtekinoで扱うが、
+	//ボスのenemyオブジェクトだけ特別にkyeenemynoにもIDがセットされる。
+	//kyeenemynoはボスの初期化時にセットされる。
+	if (filpcount > FRAME_RATE * 130) {
+	    if (kyeenemyno->f == FALSE) {
+		// ボスが死ぬと実行される
+		//if (enemy[kyeenemyno].y < 240 + 32) {
+		    // 条件を満たすとSuperbomが呼ばれるが何の条件かは
+		    // 分からない。Superbomはoriginalのゲーム中では一回も
+		    // 呼ばれない。if文をはずすと一瞬だけ大きな爆発が
+		    // 起こるがショボイ。
+	      // Superbom(enemy[kyeenemyno].x, enemy[kyeenemyno].y);
+	      //}
+	      stage = 1;
+	      filpcount = 0;
+	      //kyeenemyno = -1;
+	      clear_result[0] = infg_level;
+	    }
+	}
+    }				//stage0.end
+
+    if (stage == 1) {
+	switch (filpcount) {
+	case 1:
+	    SoundStop();
+	    SoundPlay(1);
+	    //SsSetTempo(seq[1], 0, 140);
+	    break;
+
+	case FRAME_RATE * 3:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 4:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 5:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 6:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 7:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 8:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 9:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 10:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 11:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 12:
+	    Putenemy(2, 256, -128, -1, 2, chara_state7);
+	    break;
+	case FRAME_RATE * 13:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 14:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 15:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 16:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 20:
+	    Putenemy(2, 512, -128, 0, 2, chara_state4);
+	    Putenemy(2, 1024, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 21:
+	    Putenemy(42, 0, 384, 0, 0, chara_state401);
+	    break;
+	case FRAME_RATE * 23:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 24:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 25:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 26:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 27:
+	    Putenemy(2, 800, 0, 1, 3, chara_state5);
+	    break;
+	case FRAME_RATE * 28:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 29:
+	    Putenemy(41, 256, 0, 0, 1, chara_state5);
+	    Putenemy(41, 1280 - 256 - 128, 0, 0, 1, chara_state5);
+	    Putenemy(9, 0, 0, 0, 3, chara_state22);
+	    break;
+	case FRAME_RATE * 30:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 31:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 32:
+	    Putenemy(42, 1280, 256, 0, -1, chara_state402);
+	    Putenemy(42, 1280, 384, 0, 0, chara_state402);
+	    Putenemy(42, 1280, 512, 0, -1, chara_state402);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 33:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 34:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 35:
+	    Putenemy(2, 640, 0, 0, 3, chara_state5);
+	    break;
+	case FRAME_RATE * 36:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 43:
+	    for (i = 0; i < 7; i++) {
+		Putenemy(43, rand() % 2560, -i * 16, 0, rand() % 4, chara_state400);
+	    }
+	    break;
+	case FRAME_RATE * 44:
+	    for (i = 0; i < 9; i++) {
+		Putenemy(43, rand() % 2560, -i * 12, 0, rand() % 4, chara_state400);
+	    }
+	    break;
+	case FRAME_RATE * 45:
+	    for (i = 0; i < 5; i++) {
+		Putenemy(43, rand() % 640, 0, 0, rand() % 4, chara_state400);
+	    }
+	    break;
+	case FRAME_RATE * 48:
+	    Putenemy(41, 88, 0, 0, 2, chara_state3);
+	    Putenemy(41, 176, 0, 0, 3, chara_state3);
+	    break;
+	case FRAME_RATE * 50:
+	    Putenemy(41, 266, 0, 0, 3, chara_state4);
+	    break;
+	case FRAME_RATE * 51:
+	    Putenemy(41, 352, 0, 0, 3, chara_state5);
+	    break;
+	case FRAME_RATE * 52:
+	    Putenemy(40, 840, 0, 4, 0, chara_state6);
+	    Putenemy(40, 928, 0, 4, 0, chara_state7);
+	    Putenemy(9, 976, 0, 4, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 61:
+	  /*
+	    for (i = 0; i < 300; i++) {
+		enemy[i].f = FALSE;
+	    }
+	  */
+	  for(p = active_chara_list->next;p!=NULL;p=p->next)
+	    {
+	      p->state = delete_chara;
+	      p->collision = noaction;
+	      p->f = FALSE;
+	    }
+	    break;
+
+	case FRAME_RATE * 64:
+	    SoundStop();
+	    SoundPlay(5);
+	    Putenemy(18, 528, 0, 0, 0, chara_state24);
+	    /*  Puttama(6,100,0); */
+
+	    Putenemy(13, 688, 28, 0, 0, chara_state31);
+	    Putenemy(14, 368, 28, 0, 0, chara_state32);
+
+	    Putenemy(11, 656, 0, 0, 0, chara_state33);
+	    Putenemy(12, 400, 0, 0, 0, chara_state34);
+
+	    Putenemy(15, 528, 32, 0, 0, chara_state35);
+	    break;
+	}
+	//////////////////////
+	
+	if (filpcount > FRAME_RATE * 64) {
+	    if (kyeenemyno->f == FALSE) {
+		Superbom(kyeenemyno->x, kyeenemyno->y);
+		stage = 2;
+		filpcount = 0;
+		//kyeenemyno = -1;
+		clear_result[1] = infg_level;
+	    }
+	}
+    }
+    if (stage == 2) {
+	switch (filpcount) {
+	case 1:
+	    SoundStop();
+	    SoundPlay(2);
+	    break;
+
+	case FRAME_RATE * 2:
+	    for (i = 0; i < 5; i++) {
+		Putenemy(43, rand() % 2560, -i * 16, 0, rand() % 4, chara_state400);
+	    }
+	    break;
+
+	case FRAME_RATE * 3:
+	    for (i = 0; i < 7; i++) {
+		Putenemy(43, rand() % 2560, -i * 16, 0, rand() % 4, chara_state400);
+	    }
+	    break;
+	case FRAME_RATE * 4:
+	    for (i = 0; i < 9; i++) {
+		Putenemy(43, rand() % 2560, -i * 12, 0, rand() % 4, chara_state400);
+	    }
+	    break;
+	case FRAME_RATE * 5:
+	    for (i = 0; i < 5; i++) {
+		Putenemy(43, rand() % 2560, 0, 0, rand() % 4, chara_state400);
+	    }
+	    break;
+	case FRAME_RATE * 9:
+	    for (i = 0; i < 4; i++) {
+		Putenemy(1, i * 128 + 128, 0, i, rand() % 4 + 1, chara_state7);
+	    }
+	    break;
+	case FRAME_RATE * 10:
+	    for (i = 0; i < 4; i++) {
+		Putenemy(1, 1120 - i * 128, 0, 4 - i, rand() % 4 + 1, chara_state7);
+	    }
+	    break;
+	case FRAME_RATE * 11:
+	    for (i = 0; i < 4; i++) {
+		Putenemy(41, 4*i * 64*4 + 32*4, 0, 2, rand() % 2 + 1, chara_state6);
+	    }
+	    break;
+	case FRAME_RATE * 12:
+	    for (i = 0; i < 4; i++) {
+		Putenemy(41, 280*4 - i * 64*4, 0, -2, rand() % 2 + 1, chara_state6);
+	    }
+	    break;
+	case FRAME_RATE * 15:
+	    Putenemy(42, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    Putenemy(42, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 16:
+	    Putenemy(41, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    Putenemy(41, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 18:
+	    Putenemy(42, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    Putenemy(42, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 19:
+	    Putenemy(41, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 20:
+	    Putenemy(42, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 24:
+	    Putenemy(41, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 25:
+	    Putenemy(42, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 26:
+	    Putenemy(41, rand() % (320*4 - 64*4) + 32*4, -32*4, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 30:
+	    Putenemy(1, 400, -128, 0, 3, chara_state3);
+	    Putenemy(1, 560, -128, 0, 2, chara_state3);
+	    Putenemy(1, 400, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 31:
+	    Putenemy(1, 400, -128, 0, 3, chara_state3);
+	    Putenemy(1, 400, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 32:
+	    Putenemy(1, 400, -128, 0, 3, chara_state3);
+	    Putenemy(1, 560, -128, 0, 2, chara_state3);
+	    Putenemy(1, 400, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 36:
+	    Putenemy(1, 400, -128, 0, 3, chara_state3);
+	    Putenemy(1, 560, -128, 0, 2, chara_state3);
+	    Putenemy(1, 400, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 37:
+	    Putenemy(1, 440, -128, 0, 3, chara_state3);
+	    break;
+	case FRAME_RATE * 38:
+	    Putenemy(1, 600, -128, 0, 2, chara_state3);
+	    Putenemy(1, 760, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 39:
+	    Putenemy(1, 480, -128, 0, 3, chara_state3);
+	    Putenemy(1, 640, -128, 0, 2, chara_state3);
+	    Putenemy(1, 800, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 40:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 41:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 42:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 43:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 44:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 45:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 46:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 47:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 48:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 49:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 52:
+	    Putenemy(42, 0, 128, 0, 0, chara_state401);
+	    Putenemy(42, 0, 256, 0, 1, chara_state401);
+	    Putenemy(42, 0, 384, 0, 0, chara_state401);
+	    Putenemy(42, 0, 512, 0, -1, chara_state401);
+	    break;
+	case FRAME_RATE * 54:
+	    Putenemy(42, 1280, 128, 0, 0, chara_state402);
+	    Putenemy(42, 1280, 256, 0, 1, chara_state402);
+	    Putenemy(42, 1280, 384, 0, 0, chara_state402);
+	    Putenemy(42, 1280, 512, 0, -1, chara_state402);
+	    break;
+	case FRAME_RATE * 56:
+	    Putenemy(42, 0, 128, 0, 0, chara_state401);
+	    Putenemy(42, 0, 256, 0, 1, chara_state401);
+	    Putenemy(42, 0, 384, 0, 0, chara_state401);
+
+	    Putenemy(42, 1280, 256, 0, 1, chara_state402);
+	    Putenemy(42, 1280, 384, 0, 0, chara_state402);
+	    Putenemy(42, 1280, 512, 0, -1, chara_state402);
+	    break;
+	case FRAME_RATE * 59:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 61:
+	    Putenemy(1, 400, -128, 0, 1, chara_state3);
+	    Putenemy(1, 560, 1008, 0, 1, chara_state3);
+	    Putenemy(1, 720, 1040, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 62:
+	    for (i = 0; i < 9; i++) {
+		Putenemy(43, rand() % 2560, -i * 12, 0, rand() % 4, chara_state400);
+	    }
+	    break;
+	case FRAME_RATE * 63:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 65:
+	    Putenemy(2, 440, -128, 0, -2, chara_state3);
+	    break;
+	case FRAME_RATE * 66:
+	    Putenemy(2, 600, -128, 0, -2, chara_state3);
+	    Putenemy(1, 760, 1040, 0, -1, chara_state3);
+	    break;
+	case FRAME_RATE * 67:
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    Putenemy(9, 0, 0, 0, 0, chara_state22);
+	    break;
+	case FRAME_RATE * 69:
+	    Putenemy(2, 480, 1040, 0, -3, chara_state3);
+	    Putenemy(1, 640, 1040, 0, -2, chara_state3);
+	    Putenemy(2, 800, 1040, 0, -1, chara_state3);
+	    break;
+	case FRAME_RATE * 85:
+	    SoundStop();
+	    SoundPlay(4);
+	    Putenemy(44, 0, 0, 1, 1, chara_state410);
+	    break;
+	}
+	if (filpcount > FRAME_RATE * 85) {
+	    if (kyeenemyno->f == FALSE) {
+		Superbom(kyeenemyno->x, kyeenemyno->y);
+		stage = 3;
+		filpcount = 0;
+		//kyeenemyno = -1;
+		clear_result[2] = infg_level;
+	    }
+	}
+    }
+
+    if (stage == 3) {
+	switch (filpcount) {
+	case 1:
+	    SoundStop();
+	    SoundPlay(3);
+	    break;
+	    //now
+	case FRAME_RATE * 10:
+	    Putenemy(30, 640, 200 - 64, 0, 0, chara_state500);
+	    break;
+	}
+	if (filpcount > FRAME_RATE * 10) {
+	    if (kyeenemyno->f == FALSE) {
+		Superbom(kyeenemyno->x, kyeenemyno->y);
+
+		stage = 4;
+		filpcount = 0;
+		//kyeenemyno = -1;
+	    }
+	}
+    }
+
+    if (stage == 4) {
+	switch (filpcount) {
+	case 4:
+	    Putenemy(49, 640, 200-64, 0, 0, chara_state600);
+	}
+	if (filpcount > 4) {
+	    if (kyeenemyno->f == FALSE) {
+		Superbom(kyeenemyno->x, kyeenemyno->y);
+
+		stage = 5;
+		filpcount = 0;
+		//kyeenemyno = -1;
+		clear_result[3] = infg_level;
+		SoundStop();
+		SoundPlay(6);
+	    }
+	}
+    }
+    if (stage == 5) {
+      /*
+	for (i = 0; i < 300; i++) {
+	    if (enemy[i].f == TRUE) {
+	      //	goto noend;
+		filpcount = 0;
+	    }
+	}
+      */
+      
+	  
+	Endingscore(filpcount);
+	if (filpcount > 4000)
+	    filpcount = 4000;
+	}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scheduletest.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,233 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <SDL.h>
+#include "schedule.h"
+#include "Character.h"
+#include "Character_state.h"
+#include "sound.h"
+#include "bom.h"
+#include "tokuten.h"
+#include "count2.h"
+//#include "libps.h"
+#include"debug.h"
+#include "SDL_opengl.h"
+enum {
+    FRAME_RATE = 32,
+};
+
+/*enemy schedule*/
+int kyeenemyno = -1;
+void schedule()
+{
+    int i;
+    if (stage == 0)
+    {
+	switch (filpcount) {
+	case 1:
+	    SoundStop();
+	    SoundPlay(0);
+	    break;
+
+	case FRAME_RATE * 2:
+	    Putenemy(1, 120, -128, 0, 4, chara_state0);
+	    break;
+	case FRAME_RATE * 3:
+	  Putenemy(1, 56, -128, 0, 8, chara_state0);
+	  Putenemy(1, 184, -128, 0, 8, chara_state0);
+	    break;
+	case FRAME_RATE * 4:
+	    Putenemy(1, 120, -128, 0, 4, chara_state0);
+	    break;
+	case FRAME_RATE * 5:
+	    Putenemy(1, 224, -128, 1, 1, chara_state0);
+	    Putenemy(1, 184, -128, 1, 1, chara_state0);
+	    break;
+	case FRAME_RATE * 6:
+	    Putenemy(1, 120, -128, 1, 2, chara_state0);
+	    break;
+	case FRAME_RATE * 7:
+	    Putenemy(1, 56, -128, 0, 1, chara_state0);
+	    Putenemy(1, 184, -128, 0, 1, chara_state0);
+	    break;
+	case FRAME_RATE * 8:
+	    Putenemy(2, 120, -128, 0, 1, chara_state0);
+	    break;
+
+	case FRAME_RATE * 12:
+	    Putenemy(1, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 13:
+	    Putenemy(1, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 14:
+	    Putenemy(1, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 15:
+	    Putenemy(2, 1280 - 128 - 120, -128, -1, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 16:
+	    Putenemy(2, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 17:
+	    Putenemy(2, 1280 - 128 - 120, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 18:
+	    Putenemy(1, 1280 - 128 - 120, -32, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 128, -128, -2, 1, chara_state4);
+	    Putenemy(1, 800, -88, -1, 1, chara_state4);
+	    break;
+
+	case FRAME_RATE * 24:
+	    Putenemy(1, 256, -128, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 256 - 128, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 25:
+	    Putenemy(2, 512, -128, 0, 1, chara_state4);
+	    Putenemy(2, 1280 - 128, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 26:
+	    Putenemy(1, 384, -128, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 256, -128, 0, 2, chara_state4);
+	    Putenemy(1, 512, -128, 0, 3, chara_state4);
+	    Putenemy(1, 1280 - 256, -128, 0, 2, chara_state4);
+	    break;
+	case FRAME_RATE * 27:
+	    Putenemy(2, 512, -128, 0, 3, chara_state2);
+	    Putenemy(2, 256 - 128, -128, 0, 2, chara_state2);
+	    Putenemy(2, 768, -128, 0, 4, chara_state2);
+	    Putenemy(2, 128, -128, 0, 3, chara_state2);
+	    break;
+	case FRAME_RATE * 28:
+	    Putenemy(1, 256, -128, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 256 - 128, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 29:
+	    Putenemy(2, 256, -128, 0, 1, chara_state4);
+	    Putenemy(2, 1280 - 256 - 128, -128, 0, 1, chara_state4);
+	    break;
+	case FRAME_RATE * 30:
+	    Putenemy(1, 256, -128, 0, 1, chara_state4);
+	    Putenemy(1, 1280 - 256 - 128, -128, 0, 1, chara_state4);
+	    break;
+
+	case FRAME_RATE * 33:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state5);//5/22/pm5:300
+	    break;
+	case FRAME_RATE * 34:
+	    Putenemy(2, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(2, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 35:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 36:
+	    Putenemy(2, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(2, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 37:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 38:
+	    Putenemy(2, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(2, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+	case FRAME_RATE * 39:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state5);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state5);
+	    break;
+
+	case FRAME_RATE * 50:
+	    Putenemy(40, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 46:
+	    Putenemy(40, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state3);
+	    break;
+	case FRAME_RATE * 54:
+	    Putenemy(40, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state3);
+	    break;
+
+	case FRAME_RATE * 60:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 61:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 62:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 63:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 64:
+	    Putenemy(1, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(1, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+	case FRAME_RATE * 65:
+	    Putenemy(40, 256, 1088, 0, -1, chara_state6);
+	    Putenemy(40, 1280 - 256 - 128, 1088, 0, -1, chara_state6);
+	    break;
+
+	case FRAME_RATE * 80:
+	    Putenemy(42, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 66:
+	    Putenemy(41, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 84:
+	    Putenemy(42, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 70:
+	    Putenemy(41, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 88:
+	    Putenemy(42, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 74:
+	    Putenemy(41, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 92:
+	    Putenemy(42, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 78:
+	    Putenemy(41, rand() % (1280 - 256) + 128, -128, 0, 1, chara_state7);
+	    break;
+
+	case FRAME_RATE * 100:
+	    Putenemy(41, 256, -128, 0, 1, chara_state7);
+	    Putenemy(41, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 81:
+	    Putenemy(42, 256, -128, 0, 1, chara_state7);
+	    Putenemy(42, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 104:
+	    Putenemy(41, 256, -128, 0, 1, chara_state7);
+	    Putenemy(41, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 83:
+	    Putenemy(42, 256, -128, 0, 1, chara_state7);
+	    Putenemy(42, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 108:
+	    Putenemy(41, 256, -128, 0, 1, chara_state7);
+	    Putenemy(41, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 85:
+	    Putenemy(42, 256, -128, 0, 1, chara_state7);
+	    Putenemy(42, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+	case FRAME_RATE * 112:
+	    Putenemy(41, 256, -128, 0, 1, chara_state7);
+	    Putenemy(41, 1280 - 256 - 128, -128, 0, 1, chara_state7);
+	    break;
+
+	}			//case文
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sgoex.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,520 @@
+/*
+  スプライト管理関数
+*/
+
+//#include<libps.h>
+#include <stdio.h>
+#include <SDL.h>
+#include "SDL_image.h"
+//#include "libps2.h"
+#include "SDL_opengl.h"
+#include "texture.h"
+#include "object.h"
+#include "tree_controll.h"
+#include "sgoex.h"
+#include "trace.h"
+#include "syokika.h"
+#include "LoadSprite.h"
+
+
+//extern void Back(GsOT * ot);
+extern void Draw_rectangle(void *obj);
+extern void draw_sprite(void *obj);
+
+#define OT_LENGTH	1	/*  オーダリングテーブル */
+#define MAXOBJ    320		/*スプライト表示上限 */
+
+#define TRUE	1
+#define FALSE	0
+
+int count;
+
+/*オーダリングテーブル関連*/
+
+//GsOT WorldOT[2];
+//GsOT_TAG OTTags[2][1 << OT_LENGTH];
+
+//PACKET GpuPacketArea[2][MAXOBJ * (20 + 4)];
+
+//GsSPRITE *sp, sprite[MAXOBJ];
+
+u_short tpage;
+//RECT rect;
+SDL_Rect rect;
+
+int nActiveBuff;		/*ばふぁ */
+int i;				/* Multi-purpose */
+//static int pageno;
+
+//static int padd;
+
+const int sgo_tpx[12] =
+{ 0, 64, 128, 192, 256, 320, 0, 64, 128, 192, 256, 320 };
+const int sgo_tpy[12] = { 0, 0, 0, 0, 0, 0, 256, 256, 256, 256, 256, 256 };
+
+/*  sgo.h  独自の変数形  */
+SpriteTable sptable[DEFOBJ];
+SpriteView spview[MAXOBJ];
+
+#define IMAGE_ADJUSTMENT (0) 
+
+/**
+ * 一つの画像をpageno(page number)で区切るtexture_page_offsetで
+ * pagenoに対応した領域のx,yを用意しておく。PlayStationではpageno
+ * で区切る必要があったのだろうが、PS2では全く意味はなさない。
+ */
+const struct texture_page_offset {
+    int x;
+    int y;
+} texpage_offset[] = {
+    {0, 0}, {128 + IMAGE_ADJUSTMENT, 0}, {256 + IMAGE_ADJUSTMENT, 0}, {384 + IMAGE_ADJUSTMENT, 0}};
+
+/*-------------------------------------------------------------
+  関数プロトタイプ
+  ---------------------------------------------------------------*/
+
+void Gdraw()
+{
+    SDL_UpdateRect(screen, 0,0,0,0);
+}
+
+
+
+void DefSpriteEx(int number, short middlex, short middley)
+{
+    sptable[number].mx = middlex;
+    sptable[number].my = middley;
+}
+
+
+void SDL_GL_Enter2DMode()
+{
+    //	SDL_Surface *sc = SDL_GetVideoSurface();
+
+    /* Note, there may be other things you need to change,
+       depending on how you have your OpenGL state set up.
+    */
+    glPushAttrib(GL_ENABLE_BIT);
+    glDisable(GL_DEPTH_TEST);
+    glDisable(GL_CULL_FACE);
+    glEnable(GL_TEXTURE_2D);
+
+    /* This allows alpha blending of 2D textures with the scene */
+    glEnable(GL_BLEND);
+    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+    glViewport(0, 0, screen->w, screen->h);
+
+    glMatrixMode(GL_PROJECTION);
+    glPushMatrix();
+    glLoadIdentity();
+
+    glOrtho(0.0, (GLdouble)screen->w, (GLdouble)screen->h, 0.0, 0.0, 1.0);
+
+    glMatrixMode(GL_MODELVIEW);
+    glPushMatrix();
+    glLoadIdentity();
+
+    //	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+}
+
+
+void SDL_GL_Leave2DMode()
+{
+    glMatrixMode(GL_MODELVIEW);
+    glPopMatrix();
+
+    glMatrixMode(GL_PROJECTION);
+    glPopMatrix();
+
+    glPopAttrib();
+}
+
+
+static int power_of_two(int input)
+{
+    int value = 1;
+
+    while ( value < input ) {
+	value <<= 1;
+    }
+    return value;
+}
+
+
+void DefSprite(int number, char *name, float w, float h, int color, OBJECT *obj)
+{
+    SURFACE *surfaces;
+    /*
+      sptable[number].page = page;
+      sptable[number].dx = x;
+      sptable[number].dy = y;
+    */
+    surfaces = search_node(obj, name);
+    if(surfaces == NULL)
+    {
+	fprintf(stderr, "can't get node\n");
+	printf("%s", name);
+	SDL_Quit();
+	exit(1);
+    }
+    sptable[number].w = w;
+    sptable[number].h = h;
+    sptable[number].color = (color & 32);
+    sptable[number].mx = w / 2;
+    sptable[number].my = h / 2;
+    sptable[number].tex_w = power_of_two(sptable[number].w);
+    sptable[number].tex_h = power_of_two(sptable[number].h);
+    texMinX[number] = 0.0f;
+    texMinY[number] = 0.0f;
+    texMaxX[number] = (GLfloat)sptable[number].w / sptable[number].tex_w;
+    texMaxY[number] = (GLfloat)sptable[number].h / sptable[number].tex_h;  
+    printf("texMaxX = %f, w = %d, tex_w = %d\n",
+	   texMaxX[number], sptable[number].w, sptable[number].tex_w);
+    sptable[number].texture = surfaces->texture;
+}
+
+void PutSprite(int zorder, short x, short y, int number)
+{
+    //static GLuint texture[250] = {0};
+#if 0
+    /*
+      sp = &sprite[zorder];
+    
+      spview[zorder].extend = FALSE;
+      sp->w = sptable[number].w;
+      sp->h = sptable[number].h;
+      sp->u = sptable[number].dx;
+      sp->v = sptable[number].dy;
+      sp->x = x;
+      sp->y = y;
+      sp->cx = 0;
+      sp->cy = 480 + sptable[number].color;
+	
+      spview[zorder].no = number;*/	/* 表示するスプライトの番号の格納 */
+#endif
+
+    //SDL_GL_Enter2DMode();
+    glBindTexture(GL_TEXTURE_2D, (GLuint)sptable[number].texture);
+    glEnable(GL_BLEND);
+    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+    glBegin(GL_QUADS);
+    glTexCoord2f(texMinX[number],texMinY[number]); glVertex2i((GLuint)x,   (GLuint)y  );
+    glTexCoord2f(texMinX[number],texMaxY[number]); glVertex2i((GLuint)x, (GLuint)(y+sptable[number].tex_h)  );
+    glTexCoord2f(texMaxX[number],texMaxY[number]); glVertex2i((GLuint)(x+sptable[number].tex_w),   (GLuint)(y+sptable[number].tex_h));
+    glTexCoord2f(texMaxX[number],texMinY[number]); glVertex2i((GLuint)(x+sptable[number].tex_w), (GLuint)y);
+    glEnd();
+    glDisable(GL_BLEND);
+    //SDL_GL_Leave2DMode();
+}
+
+void PutSpriteEx(int number, int x, int y, float scalex, float scaley, float angle)
+{
+    SpriteTable *m = &sptable[number];
+    x -= m->w;
+    y -= m->h;
+
+    SDL_GL_Enter2DMode();
+    glEnable(GL_TEXTURE_2D);
+    glEnable(GL_BLEND);
+    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+    glBindTexture(GL_TEXTURE_2D, (GLuint)sptable[number].texture);
+    glTranslatef(x + m->w/2, y + m->h/2, 0.0);
+    glRotatef(angle, 0.0, 0.0, 1.0);
+    glScalef(scalex, scaley, 1.0);
+    glBegin(GL_TRIANGLE_STRIP);
+    {
+	glTexCoord2f(texMinX[number], texMinY[number]); glVertex2i(-m->w/2, -m->h/2);
+	glTexCoord2f(texMaxX[number], texMinY[number]); glVertex2i( m->w/2, -m->h/2);
+	glTexCoord2f(texMinX[number], texMaxY[number]); glVertex2i(-m->w/2,  m->h/2);
+	glTexCoord2f(texMaxX[number], texMaxY[number]); glVertex2i( m->w/2,  m->h/2);
+    }
+    glEnd();
+    glDisable(GL_TEXTURE_2D);
+    glDisable(GL_BLEND);
+    SDL_GL_Leave2DMode();
+    //  SDL_GL_SwapBuffers();
+}
+
+/*void PutSpriteEx(int zorder, short scalex, short scaley, long rotate)
+  {
+  sp = &sprite[zorder];
+
+  spview[zorder].extend = TRUE;
+
+  sp->mx = sptable[spview[zorder].no].mx;
+  sp->my = sptable[spview[zorder].no].my;
+  sp->scalex = scalex;
+  sp->scaley = scaley;
+  sp->rotate = rotate;
+  }*/
+
+void init_tim(u_long addr)
+{
+    //RECT rect;
+    /*  SDL_Rect rect;
+	GsIMAGE image;
+
+	GsGetTimInfo((unsigned int *) (addr + 4), &image);
+
+	rect.x = image.px;
+	rect.y = image.py;
+	rect.w = image.pw;
+	rect.h = image.ph;
+	LoadImage(&rect, image.pixel);
+	DrawSync(0);
+
+	rect.x = image.cx;
+	rect.y = image.cy;
+	rect.w = image.cw;
+	rect.h = image.ch;
+	LoadImage(&rect, image.clut);
+	DrawSync(0);
+    */
+}
+
+struct SGO_PAD pad[2];
+
+#ifdef ENABLE_TRACEMODE
+extern int runmode;
+#endif				//ENABLE_TRACEMODE
+
+/* コントローラ状態の読み込み */
+void Pad(SDL_Joystick *joy)
+{
+    Sint16 axis;
+
+    SDL_JoystickUpdate();
+  
+    if(SDL_JoystickGetButton(joy,PS2_CROSS)==SDL_PRESSED)
+	pad[0].k0++;
+    else
+	pad[0].k0=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_CIRCLE)==SDL_PRESSED)
+	pad[0].k1++;
+    else
+	pad[0].k1=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_SQUARE)==SDL_PRESSED)
+	pad[0].k3++;
+    else
+	pad[0].k3=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_TRIANGLE)==SDL_PRESSED)
+	pad[0].k4++;
+    else
+	pad[0].k4=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_L1)==SDL_PRESSED)
+	pad[0].l1++;
+    else
+	pad[0].l1=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_R1)==SDL_PRESSED)
+	pad[0].r1++;
+    else
+	pad[0].r1=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_L2)==SDL_PRESSED)
+	pad[0].l2++;
+    else
+	pad[0].l2=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_R2)==SDL_PRESSED)
+	pad[0].r2++;
+    else
+	pad[0].r2=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_START)==SDL_PRESSED)
+	pad[0].st++;
+    else
+	pad[0].st=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_SELECT)==SDL_PRESSED)
+	pad[0].se++;
+    else
+	pad[0].se=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_L3)==SDL_PRESSED)
+	pad[0].l3++;
+    else
+	pad[0].l3=0;
+  
+    if(SDL_JoystickGetButton(joy,PS2_R3)==SDL_PRESSED)
+	pad[0].r3++;
+    else
+	pad[0].r3=0;
+    //x
+    axis=SDL_JoystickGetAxis(joy,0);
+    if(axis>=3200){
+	pad[0].left=0;
+	pad[0].right++;
+    }
+    else if(axis<=-3200){
+	pad[0].right=0;
+	pad[0].left++;
+    }
+    else {
+	pad[0].right=0;
+	pad[0].left=0;
+    }
+    //y
+    axis=SDL_JoystickGetAxis(joy,1);
+    if(axis>=3200){
+	pad[0].up=0;
+	pad[0].down++;
+    }
+    else if(axis<=-3200){
+	pad[0].down=0;
+	pad[0].up++;
+    }
+    else {
+	pad[0].down=0;
+	pad[0].up=0;
+    }
+
+    if ((pad[0].l1 != 0) && (pad[0].r1 != 0) &&
+	(pad[0].l2 != 0) && (pad[0].r2 != 0) &&
+	(pad[0].st != 0) && (pad[0].se != 0)) {
+	pad[0].quit = 1;
+    } else {
+	pad[0].quit = 0;
+    }
+	
+}
+
+
+void keybord()
+{
+    SDL_PumpEvents();
+    Uint8 *keys = SDL_GetKeyState(NULL);
+
+    if (keys[SDLK_UP]) {
+	pad[0].up++;
+    } else {
+	pad[0].up = 0;
+    }
+    if (keys[SDLK_DOWN]) {
+	pad[0].down++;
+    } else {
+	pad[0].down = 0;
+    }
+
+    if (keys[SDLK_RIGHT]) {
+	pad[0].right++;
+    } else {
+	pad[0].right = 0;
+    }
+
+    if (keys[SDLK_LEFT]) {
+	pad[0].left++;
+    } else {
+	pad[0].left = 0;
+    }
+
+    if (keys[SDLK_a]) {
+	pad[0].k0++;
+    } else {
+	pad[0].k0 = 0;
+    }
+
+    if (keys[SDLK_z]) {
+	pad[0].k1++;
+    } else {
+	pad[0].k1 = 0;
+    }
+
+    if (keys[SDLK_s]) {
+	pad[0].k3++;
+    } else {
+	pad[0].k3 = 0;
+    }
+    
+    if (keys[SDLK_x]) {
+	pad[0].k4++;
+    } else {
+	pad[0].k4 = 0;
+    }
+
+    if (keys[SDLK_r]) {
+	pad[0].r2++;
+    } else {
+	pad[0].r2 = 0;
+    }
+
+    if (keys[SDLK_e]) {
+	pad[0].r1++;
+    } else {
+	pad[0].r1 = 0;
+    }
+
+    if (keys[SDLK_w]) {
+	pad[0].l1++;
+    } else {
+	pad[0].l1 = 0;
+    }
+
+    if (keys[SDLK_q]) {
+	pad[0].l2++;
+    } else {
+	pad[0].l2 = 0;
+    }
+
+    // START ボタンは Return が似合う気がする
+    //if(keys[SDLK_1])
+    if (keys[SDLK_RETURN]) {
+	pad[0].st++;
+    } else {
+	pad[0].st = 0;
+    }
+
+    if (keys[SDLK_2]) {
+	pad[0].se++;
+    } else {
+	pad[0].se = 0;
+    }
+
+    if (keys[SDLK_ESCAPE]) {
+	SDL_Quit();
+	exit(1);
+	//pad[0].st = 1;
+	//pad[0].se = 1;
+    }
+
+    if (keys[SDLK_0]) {
+	pad[0].quit = 1;
+    } else {
+	pad[0].quit = 0;
+    }
+}
+
+
+/*!
+  \brief PNGシステムの初期化
+*/
+/*
+  void *init_png(char *png_file)
+  {
+  
+  TEXTURE *tex[1];
+
+  tex[0] = read_png_file0(png_file, 1);
+  if (tex[0] == NULL) {
+  fprintf(stderr, "failed to read a texture data. \n");
+  goto INIT_PNG_FAILED;
+  }
+  if (load_textures(1, tex) < 0) {
+  fprintf(stderr, "failed to load a texture to GS-VRAM. \n");
+  goto INIT_PNG_FAILED;
+  }
+
+  return tex[0];
+
+
+  fflush(stderr);
+  return NULL;
+  
+  }
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sgoex.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,134 @@
+
+#define DEFOBJ    320		// sprite definition max num
+#define MAXOBJ    320		// sprite drawing max num
+#define BOOL      char		// define bool
+#define TRUE      1		// TRUE value
+#define FALSE     0		// FALSE value
+
+/*PS2_PAD*/
+#define PS2_CROSS 0
+#define PS2_CIRCLE 1
+#define PS2_SQUARE 2
+#define PS2_TRIANGLE 3
+#define PS2_L1 4
+#define PS2_R1 5
+#define PS2_L2 6
+#define PS2_R2 7
+#define PS2_START 8
+#define PS2_SELECT 9
+#define PS2_L3 10
+#define PS2_R3 11
+
+/*PS3_PAD*/
+/*
+#define PS2_CROSS 14
+#define PS2_CIRCLE 13
+#define PS2_SQUARE 15
+#define PS2_TRIANGLE 12
+#define PS2_L1 10
+#define PS2_R1 11
+#define PS2_L2 8
+#define PS2_R2 9
+#define PS2_START 3
+#define PS2_SELECT 0
+#define PS2_L3 1
+#define PS2_R3 2
+*/
+
+typedef struct SGO_PAD {
+    short up;
+    short down;
+    short right;
+    short left;
+    short k0;
+    short k1;
+    short k3;
+    short k4;
+    short r1;
+    short r2;
+    short r3;
+    short l1;
+    short l2;
+    short l3;
+    short se;
+    short st;
+
+    // 勝手に付けた
+    short quit;
+} SGO_PAD;
+
+typedef struct SpriteView {
+    int x;
+    int y;
+    BOOL extend;
+    short scalex;
+    short scaley;
+    long rotate;
+    int no;
+} SpriteView;
+
+typedef struct SpriteTable {
+  short dx;
+  short dy;
+  short w;
+  short h;
+  short mx;
+  short my;
+  int color;
+  int page;
+  int tex_w;
+  int tex_h;
+  int *texture;
+} SpriteTable;
+
+//extern GsSPRITE sprite[MAXOBJ];
+extern SpriteTable sptable[DEFOBJ];
+
+
+void Ginit();
+void Gfinish(void);
+void Gdraw(void);
+void *init_png(char *png_file);
+void PutSprite(int zorder, short x, short y, int number);
+//void PutSprite();
+void DefSprite(int number, char *name, float w, float h, int color, OBJECT *obj);
+void DefSpriteEx(int number, short middlex, short middley);
+void sound_init(void);
+void view_init(int p);
+void view_move(int x, int y, int z, int rx, int ry, int rz);
+void model_init(int model_no, unsigned long *dop, int m1_x, int m1_y,
+		int m1_z, int m2_x, int m2_y, int m2_z);
+char xml_model_init(int model_no, void *template_obj, int m1_x, int m1_y,
+		    int m1_z, int m2_x, int m2_y, int m2_z);
+void m2move(int model_no, int x, int y, int z, int rx, int ry, int rz);
+void PutPolygon(int number);
+void PutSpriteEx(int number, int x, int y, float scalex, float scaley, float angle);
+//void PutSpriteEx(int zorder, short scalex, short scaley, long rotate);
+
+void sgoex_ps2_Set_camera(void);
+void sgoex_ps2_Put_sprite(int num, float x, float y);
+char sgoex_ps2_Create_sprites(void);
+char sgoex_ps2_Init_xmlCube(char *redCube_file,
+			    char *blueCube_file,
+			    char *greenCube_file, char *yellowCube_file);
+char sgoex_ps2_Init_xmlFloor(char *file_name);
+void *sgoex_ps2_Get_redCube(void);
+void *sgoex_ps2_Get_blueCube(void);
+void *sgoex_ps2_Get_greenCube(void);
+void *sgoex_ps2_Get_yellowCube(void);
+void *sgoex_ps2_Get_xmlFloor(void);
+void xml_floor_Finish(void);
+
+
+/* Joypad - Below member are implemented in sgoex_ps2.c */
+extern SGO_PAD pad[2];
+//void Pad(void);
+void Pad();
+void keybord();
+//void Pad1(SGO_PAD * padls);
+//void Pad2(SGO_PAD * padls);
+
+//void GsSortBoxFill(GsBOXF * bp, GsOT * otp, unsigned int pri);
+
+/* dummies */
+// void init_tim( int tim_addr );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sound.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,251 @@
+#include <stdio.h>
+#include <SDL.h>
+#include <SDL_mixer.h> //追加
+#include "sound.h"
+#include "Ss.h"
+
+#include "error.h"
+//#include "libps.h"
+
+//int vh_addr[10]={0x80140000,0x80141a00,0x80143000,0x80144400,0x80148200,
+//               0x80149300,0x8014f300,0x80130000,0x80130000,0x80130000};
+
+//_________________________________________________________
+Mix_Chunk *chunk[8]; // 音楽ファイルの読み込み変数
+int channel[8];
+//_________________________________________________________
+
+static char buf0[] = "pBAV";
+
+int vh_addr[10] =
+{ (int) buf0, (int) buf0, (int) buf0, (int) buf0, (int) buf0,
+  (int) buf0 };
+
+int vb_addr[10] =
+{ 0x80140d00, 0x80142700, 0x80143d00, 0x80145100, 0x80148f00,
+  0x8014a100, 0x80150000, 0x80140000, 0x80140000, 0x80140000
+};
+
+int vab[10];			/* SE 用 VAB */
+unsigned char *buf;
+int cnt;
+int seqno = -1;
+
+int seq[4];			/* SEQ data id */
+int sdvab;			/* 常駐 SE.VAB */
+
+//CdlFILE vhfile, vbfile;
+
+int SQ[10] = { 0x80155000, 0x8015f000, 0x80168000, 0x8016e000, 0x80175000,
+	       0x80177000, 0xa00d0000, 0xa00e0000, 0x801e0000
+};
+
+void Soundss()
+{
+    /*
+      int i;
+
+      //Set Sound Reverb @@@  リバーブの設定 
+      printf("音源データをCDから読み込み中");
+      SsUtSetReverbType(SS_REV_TYPE_STUDIO_C);
+      SsUtReverbOn();
+
+
+      // 音源データのCDからの読み込み 
+      // 標準音源(VH属性部)の読み込み 
+      for (i = 0; i < 10; i++) {	// リトライループ 
+      if (CdSearchFile(&vhfile, VH_NAME) != 0)
+      break;		//正常終了ならばリトライループ中断 
+      else
+      printf("%s not found.\n", VH_NAME);
+      }
+      printf("♪");
+      for (i = 0; i < 10; i++) {	// リトライループ 
+      CdReadFile(VH_NAME, (void *) SQVH_ADDR, vhfile.size);
+
+      // リードの裏で通常の処理は実行できる。
+      // ここでは、Read が終了するまで残りのセクタ数を監視 
+      while ((cnt = CdReadSync(1, 0)) > 0)
+      VSync(0);		// 垂直同期割り込み待ち(時間調整用)
+      if (cnt == 0)
+      break;		// 正常終了ならばリトライループ中断 
+      }
+      // 標準音源(VB波形部)の読み込み 
+      for (i = 0; i < 10; i++) {	// リトライループ 
+      if (CdSearchFile(&vbfile, VB_NAME) != 0)
+      break;		// 正常終了ならばリトライループ中断 
+      else
+      printf("%s not found.\n", VB_NAME);
+      }
+      printf("♪");
+      for (i = 0; i < 10; i++) {	// リトライループ 
+      CdReadFile(VB_NAME, (void *) SQVB_ADDR, vbfile.size);
+
+      // リードの裏で通常の処理は実行できる。
+      // ここでは、Read が終了するまで残りのセクタ数を監視 
+      while ((cnt = CdReadSync(1, 0)) > 0)
+      VSync(0);		// 垂直同期割り込み待ち(時間調整用)
+
+      if (cnt == 0)
+      break;		// 正常終了ならばリトライループ中断 
+      }
+      printf("♪");
+      // Open & transfer VAB data @@@ *VAB データのオープン,転送 
+      sdvab = SsVabTransfer(SQVH_ADDR, SQVB_ADDR, -1, 1);
+      if (sdvab < 0) {
+      printf("VAB open failed(sdvab = %d)\n", sdvab);
+      return;
+      }
+      printf("完了。\n");
+      //      seq[0] = SsSeqOpen (SQ_ADDR, sdvab);
+      //      for (i=0;i<8;i++)
+      //      seq[i] = SsSeqOpen ((unsigned long*)SQ[i], sdvab);
+      */
+}
+
+void SoundPlay(int no)
+{
+    // Open SEQ/SEP datas @@@ * SEQ/SEP データのオープン 
+    //    SsSetMVol (127, 127);
+    //    SsUtSetReverbDepth( 40, 40 );
+
+    seq[no] = SsSeqOpen((unsigned int *) SQ[no], sdvab);
+    seqno = no;
+    //SsSeqPlay(seq[no], SSPLAY_PLAY, 0);
+
+}
+
+void SoundStop()
+{
+    if (seqno == -1)
+	return;
+    //SsSeqStop(seq[seqno]);
+    //SsSeqClose(seq[seqno]);
+}
+
+//__________________________________________________________________
+/**
+ * 全部これで判定するのはおかしい。
+ * んだけど、時間がががががが
+ */
+int no_useSDLMixer = 0;
+
+void
+InitSdlMixer(void)
+{
+    if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,MIX_DEFAULT_FORMAT,2,1024) < 0) {
+        __debug("failed to initialize SDL_mixer.\n");
+	no_useSDLMixer = 1;
+    }
+}
+
+
+// 音楽ファイル読み込み関数
+void LoadSdlMixer()
+{
+    if (no_useSDLMixer) {
+	__debug("%s is not executed because no_useSDLMixer is set\n",
+		__FUNCTION__);
+    } else {
+	chunk[BGM]=Mix_LoadWAV("./sound/sample.wav");
+	chunk[SHOT_A]=Mix_LoadWAV("./sound/shota.wav");
+	chunk[SHOT_B]=Mix_LoadWAV("./sound/shotb.wav");
+	chunk[SHOT_C]=Mix_LoadWAV("./sound/shotc.wav");
+	chunk[RING]=Mix_LoadWAV("./sound/ring.wav");
+	chunk[NEW]=Mix_LoadWAV("./sound/powerdown.wav");
+	chunk[JIKIOUT]=Mix_LoadWAV("./sound/jikiout.wav");
+	chunk[BOM]=Mix_LoadWAV("./sound/bomber.wav");
+	
+	// 読み込めないファイルがあればエラーで終了
+	if(!chunk[BGM] || !chunk[SHOT_A] || !chunk[SHOT_B] || !chunk[SHOT_C]
+	   ||!chunk[RING] || !chunk[NEW] || !chunk[JIKIOUT] || !chunk[BOM]) {
+	    fprintf(stderr,"failed to load sound.\n");
+	    //return -1;
+	    return;
+	}
+    }
+}
+
+/* 音楽再生関数
+   int fleg ... 再生回数。-1でループします。
+   int ch ... 再生する音の番号*/
+void
+PlaySdlMixer(int fleq, int ch)
+{
+    if (no_useSDLMixer) {
+	__debug("%s is not executed because no_useSDLMixer is set\n",
+		__FUNCTION__);
+    } else {
+	channel[ch]=Mix_PlayChannel( ch ,chunk[ch], fleq);
+    }
+}
+
+void
+PauseSdlMixer(int ch)
+{
+    if (no_useSDLMixer) {
+	__debug("%s is not executed because no_useSDLMixer is set\n",
+		__FUNCTION__);
+    } else {
+	Mix_Pause(ch);
+    }
+}
+
+void
+ResumeSdlMixer(int ch)
+{
+    if (no_useSDLMixer) {
+	__debug("%s is not executed because no_useSDLMixer is set\n",
+		__FUNCTION__);
+    } else {
+	Mix_Resume(ch);
+    }
+}
+
+void
+TimeSdlMixer(int fleq, int ch, int time)
+{
+    if (no_useSDLMixer) {
+	__debug("%s is not executed because no_useSDLMixer is set\n",
+		__FUNCTION__);
+    } else {
+	channel[ch]=Mix_PlayChannelTimed( ch ,chunk[ch], fleq, time);
+    }
+}
+
+
+// 音の解放関数
+void
+FreeSdlMixer()
+{
+    int i ;
+
+    if (no_useSDLMixer) {
+	__debug("%s is not executed because no_useSDLMixer is set\n",
+		__FUNCTION__);
+    } else {
+	for(i =0; i < 8; ++i) {
+	    Mix_FreeChunk(chunk[i]);
+	}
+    }
+}
+
+void
+InitVolume(void)
+{
+    if (no_useSDLMixer) {
+	__debug("%s is not executed because no_useSDLMixer is set\n",
+		__FUNCTION__);
+    } else {
+	Mix_Volume( 0, 255);       // BGM
+	Mix_Volume( 1, SE_VOLUME); // SHOT_A
+	Mix_Volume( 2, SE_VOLUME); // SHOT_B
+	Mix_Volume( 3, 100);       // SHOT_C
+	Mix_Volume( 4, 40);        // RING
+	Mix_Volume( 5, SE_VOLUME); // NEW
+	Mix_Volume( 6, SE_VOLUME); // JIKIOUT
+	Mix_Volume( 7, 100);       // BOM
+    }
+}
+
+//_________________________________________________________________
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sound.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,49 @@
+#ifndef _SOUND_H_
+#define _SOUND_H_
+
+#define BGM 0
+#define SHOT_A 1
+#define SHOT_B 2
+#define SHOT_C 3
+#define RING 4
+#define NEW 5
+#define JIKIOUT 6
+#define BOM 7
+
+#define SE_VOLUME 60
+
+ #define LASER_A 4
+ #define LASER_C 5
+ #define JIKIOUT 6
+
+#define VH_NAME "\\DATA\\SOUND\\STD0.VH;1"
+#define VB_NAME "\\DATA\\SOUND\\STD0.VB;1"
+#define SQVH_ADDR (unsigned char*)0x80180000L
+#define SQVB_ADDR (unsigned char*)0x80190000L
+#define SQ_ADDR   (unsigned long*)0x80170000L
+
+extern void Soundss();
+extern void SoundPlay(int no);
+extern void SoundStop();
+extern int done ;
+extern void poked( int sig) ;
+//_______________________________
+extern void InitSdlMixer(void);
+extern void LoadSdlMixer(void);
+extern void FreeSdlMixer(void);
+extern void PlaySdlMixer(int freq, int ch );
+extern void PauseSdlMixer(int ch);
+extern void ResumeSdlMixer(int ch);
+extern void InitVolume(void);
+extern void TimeSdlMixer(int fleq, int ch, int time);
+//______________________________
+
+extern int se_voice[9];
+extern int vab[10];
+extern int seq[4];
+extern int vb_addr[10];
+
+extern unsigned char *buf;
+extern int vh_addr[10];
+
+#endif				// _SOUND_H_
Binary file sound/NEW.wav has changed
Binary file sound/bomber.wav has changed
Binary file sound/jikiout.wav has changed
Binary file sound/ring.wav has changed
Binary file sound/sample.wav has changed
Binary file sound/shota.wav has changed
Binary file sound/shotb.wav has changed
Binary file sound/shotc.wav has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syokika.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,291 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <SDL.h>
+#include "SDL_opengl.h"
+#include "SDL_image.h"
+#include <math.h>
+#include "object.h"
+#include "xml.h"
+#include "tree_controll.h"
+//#include "Enemy.h"
+#include "count2.h"
+#include "sgoex.h"
+#include "sankaku.h"
+//#include "back.h"
+#include "bom.h"
+#include "sound.h"
+#include "syokika.h"
+#include "debug.h"
+#include "LoadSprite.h"
+#include "testgl.h"
+
+#define CHARACTER_FILE "xml/character.xml"
+#define FONT_FILE "xml/font.xml"
+#define EFFECT_FILE "xml/effect.xml"
+#define BOSS_FILE "xml/boss.xml"
+
+//extern void init_sprite(TEXTURE * tex);
+//extern int LoadSprite();
+
+#define SEED_VALUE 1
+
+void syokika(int argc, char *argv[])
+{
+    int i, i2;
+    //volatile unsigned char *bb0, *bb1;
+    int width = 740;
+    int height = 480;
+    Uint8  video_bpp = 32;
+    Uint32 videoflags;
+
+    laser_lv3[0].r = 62;
+    laser_lv3[0].r = 62;
+
+    /* Initialize SDL */
+    if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0 ) {
+	fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
+	//return(1);
+    }
+
+    for (i = 1; argv[i]; i++) {
+	if (strcmp(argv[i], "-width") == 0) {
+	    width = atoi(argv[++i]);
+	}
+	if (strcmp(argv[i], "-height") == 0) {
+	    height = atoi(argv[++i]);
+	}
+	if (strcmp(argv[i], "-bpp") == 0) {
+	    video_bpp = atoi(argv[++i]);
+	}
+    }
+    
+    videoflags = SDL_OPENGL;
+	
+    SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 3 );
+    SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 3 );
+    SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 2 );
+    //SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );
+    SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
+	
+    /* Set video mode */
+    screen = SDL_SetVideoMode(width, height, video_bpp, videoflags);
+    if ( ! screen ) {
+	fprintf(stderr, "Couldn't set %dx%d video mode: %s\n", width, height, SDL_GetError());
+    }	
+    glClearColor( 0.0, 0.0, 0.0, 1.0 );
+    glClear( GL_COLOR_BUFFER_BIT );
+
+    /*glViewport(0, 0, screen->w, screen->h);
+      glEnable(GL_TEXTURE_2D);
+      glDisable(GL_DEPTH_TEST);
+      glDisable(GL_CULL_FACE);
+      glOrtho(0.0, (GLdouble)screen->w, (GLdouble)screen->h, 0.0, 0.0, 1.0);*/
+	
+    srand(SEED_VALUE);
+
+    //LoadSprite();
+
+    sankakuf();
+    font = read_xml_3d_file(FONT_FILE);
+    boss = read_xml_3d_file(BOSS_FILE);
+    chara = read_xml_3d_file(CHARACTER_FILE);
+    effect  = read_xml_3d_file(EFFECT_FILE);
+
+    all_object_load_texture(font);
+    all_object_load_texture(boss);
+    all_object_load_texture(chara);
+    all_object_load_texture(effect);
+
+    /*
+      for (i = 0; i < BOX_NUM; i++) {
+      boxdt[i].x = rand() % 320;
+      boxdt[i].y = rand() % 240;
+      boxdt[i].s = i % 5 + 1;
+      }
+    */
+    for (i2 = 0; i2 < 3; i2++) {
+	tlv3[i2].y = -1;
+    }
+
+    for (i = 0; i < 50; i++)
+	bchar[i].no = 8;
+
+    /**
+     * 1引数:キャラクターナンバー;
+     * 2引数:キャラクタ名;
+     * 3引数:幅
+     * 4引数:高さ
+     * 5引数:カラー- 480のままでよろし
+     * 6引数:OBJECT構造体のポインタを渡す
+     * 下書き直し
+    */
+    DefSprite(PLAYER_IDLE, "player_idle", 128, 128, 480, chara);
+    DefSprite(PLAYER_LEFTMOVE, "player_leftmove", 128, 128, 480, chara);
+    DefSprite(PLAYER_TURNTOLEFT, "player_turntoleft", 128, 128, 480, chara);
+  
+    DefSprite(PLAYER_TURNTORIGHT, "player_turntoright", 128, 128, 480, chara);
+    //DefSprite(PLAYER_RIGHTMOVE, 1, 480, chara);
+    DefSprite(PLAYER_RIGHTMOVE, "player_rightmove", 128, 128, 480, chara);
+    DefSprite(BLUEBULLET_LEFT, "bulebullet_left", 45, 128, 480, effect);
+    DefSprite(BLUEBULLET_RIGHT, "blebullet_right", 38, 128, 480, effect);
+    DefSprite(REDBULLET, "redbullet", 128, 256, 480, effect);
+    DefSprite(LONGLASER, "longlaser", 64, 256, 480, effect);
+    DefSprite(GAUGE_PANEL, "gauge_panel", 128, 512, 480, effect);
+    DefSprite(OFFENSIVEPOWER_GAUGE, "offensivepower_gauge", 27, 220, 480, effect);
+    DefSprite(BURNER, "burner", 63, 122, 480, effect);
+    DefSprite(LOCKON_SIGHT, "lockon_sight", 64, 64, 480, effect);
+    //DefSprite(SPECIAL_LASERGAUGE, "special_lasergauge", 0, 0, 480, effect);
+    DefSprite(DIFFENSIVEPOWER_GAUGE, "diffensivepower_gauge", 20, 215, 480, effect);
+    DefSprite(GREENBULLET, "greenbullet", 128, 128, 480, effect);
+    DefSprite(BULEBARRIER, "bulebarrier", 128, 128, 480, effect);
+    //DefSprite(FONT_PLAYER_1, "font_player1", 128, 32, 480, font);
+    //DefSprite(FONT_GAMEOVER, "font_gameover", 256, 32, 480, font);
+    DefSprite(FONT_0, "font_0", 32, 32, 480, font);
+    DefSprite(FONT_1, "font_1", 32, 32, 480, font);
+    DefSprite(FONT_2, "font_2", 32, 32, 480, font);
+    DefSprite(FONT_3, "font_3", 32, 32, 480, font);
+    DefSprite(FONT_4, "font_4", 32, 32, 480, font);
+    DefSprite(FONT_5, "font_5", 32, 32, 480, font);
+    DefSprite(FONT_6, "font_6", 32, 32, 480, font);
+    DefSprite(FONT_7, "font_7", 32, 32, 480, font);
+    DefSprite(FONT_8, "font_8", 32, 32, 480, font);
+    DefSprite(FONT_9, "font_9", 32, 32, 480, font);
+    DefSprite(REDBOMB_ANIM_0, "redbomb_anim_0", 64, 64, 480, effect);
+    DefSprite(REDBOMB_ANIM_1, "redbomb_anim_1", 64, 64, 480, effect);
+    DefSprite(REDBOMB_ANIM_2, "redbomb_anim_2", 64, 64, 480, effect);
+    DefSprite(REDBOMB_ANIM_3, "redbomb_anim_3", 64, 64, 480, effect);
+    DefSprite(REDBOMB_ANIM_4, "redbomb_anim_4", 64, 64, 480, effect);
+    DefSprite(REDBOMB_ANIM_5, "redbomb_anim_5", 64, 64, 480, effect);
+    DefSprite(REDBOMB_ANIM_6, "redbomb_anim_6", 64, 64, 480, effect);
+    DefSprite(REDBOMB_ANIM_7, "redbomb_anim_7", 64, 64, 480, effect);
+    DefSprite(FONT_HIGE, "font_hige", 128, 32, 480, font);
+    DefSprite(GREENBOMB_ANIM_0, "greenbomb_anim_0", 64, 64, 480, effect);
+    DefSprite(GREENBOMB_ANIM_1, "greenbomb_anim_1", 64, 64, 480, effect);
+    DefSprite(GREENBOMB_ANIM_2, "greenbomb_anim_2", 64, 64, 480, effect);
+    //DefSprite(GREENBOMB_ANIM_3, "greenbomb_anim_3", 64, 64, 480, effect);
+    DefSprite(GREENBOMB_ANIM_4, "greenbomb_anim_4", 64, 64, 480, effect);
+    DefSprite(GREENBOMB_ANIM_5, "greenbomb_anim_5", 64, 64, 480, effect);
+    DefSprite(GREENBOMB_ANIM_6, "greenbomb_anim_6", 64, 64, 480, effect);
+    DefSprite(GREENBOMB_ANIM_7, "greenbomb_anim_7", 64, 64, 480, effect);
+    DefSprite(INFLATION_GAUGE, "inflation_gauge", 64, 512, 480, effect);
+    DefSprite(INFLATION_METER, "inflation_meter", 32, 512, 480, effect);
+    DefSprite(ENEMY_GREENCRAB, "enemy_greenclab", 128, 128, 480, chara);
+    DefSprite(ENEMY_PLANE, "enemy_plane", 128, 128, 480, chara);
+    DefSprite(ENEMY_REDBULLET, "enemy_redbullet", 32, 32, 480, effect);
+    DefSprite(FONT_PUSHSTART, "font_pushstart", 512, 32, 480, font);
+    DefSprite(BOSS1_ORGAN, "boss1_organ", 128, 256, 480, boss);
+    DefSprite(ENEMY_LASER, "enemy_laser", 64, 251, 480, effect);
+    DefSprite(ENEMY_BLUEBULLET, "enemy_bluebullet", 36, 28, 480, effect);
+    DefSprite(ENEMY_LIGHTNING, "enemy_lightning", 64, 252, 480, effect);
+    DefSprite(ENEMY_LASERSPLOSH_0, "enemy_lasersplosh_0", 126, 127, 480, effect);
+    DefSprite(ENEMY_LASERSPLOSH_1, "enemy_lasersplosh_1", 124, 119, 480, effect);
+    DefSprite(ENEMY_LASERSPLOSH_2, "enemy_lasersplosh_2", 126, 127, 480, effect);
+    DefSprite(ENEMY_LASERSPLOSH_3, "enemy_lasersplosh_3", 112, 102, 480, effect);
+    DefSprite(ASTEROID, "meteo", 128, 128, 480, chara); //inseki
+    DefSprite(ORBITMACHINE, "orbitmachine", 128, 64, 480, chara); //inseki no shita maruiyatsu 
+    DefSprite(BOSS2_BODY, "boss2_body", 512, 512, 480, boss);
+    DefSprite(BOSS2_RIGHTSHOULDER, "boss2_rightshoulder", 256, 256, 480, boss);
+    DefSprite(BOSS2_LEFTSHOULDER, "boss2_leftshoulder", 256, 256, 480, boss);
+    DefSprite(BOSS2_RIGHTARM, "boss2_rightarm", 128, 256, 480, boss);
+    DefSprite(BOSS2_LEFTARM, "boss2_leftarm", 128, 256, 480, boss);
+    DefSprite(BOSS2_BATTERY, "boss2_battery", 128, 128, 480, boss);
+    DefSprite(BOSS2_OPENBATTERY, "boss2_openbattery", 256, 128, 480, boss);
+    DefSprite(BOSS2_BROKENHATCH, "boss2_brokenhatch", 128, 64, 480, boss);
+    DefSprite(BOSS2_DUMMY, "boss2_dummy", 128, 64, 480, boss);
+    DefSprite(BOSS2_RIGHTSHOULDERUP, "boss2_r_shoulderup", 256, 128, 480, boss);
+    DefSprite(BOSS2_LEFTSHOULDERUP, "boss2_left_s_up", 256, 128, 480, boss);
+    DefSprite(BOSS2_LEFTSHOULDERGIRD, "boss2_left_s_gird", 256, 256, 480, boss);
+    DefSprite(BOSS2_RIGHTARMBATTERY, "boss2_rightarm_b", 64, 64, 480, boss);
+    DefSprite(BOSS2_LEFTARMBATTERY, "boss2_leftarmbattery", 64, 64, 480, boss);
+    DefSprite(BOSS2_RIGHTHAND, "boss2_righthand", 64, 64, 480, boss);
+    DefSprite(BOSS2_RIGHTPALM, "boss2_rightpalm", 64, 64, 480, boss);
+    DefSprite(BOSS2_LEFTHAND, "boss2_lefthand", 64, 64, 480, boss);
+    DefSprite(BOSS2_LEFTPALM, "boss2_leftpalm", 64, 64, 480, boss);
+    DefSprite(PLAYER_LASERSPLOSH_0, "player_lasersplosh_0", 115, 91, 480, effect);
+    DefSprite(PLAYER_LASERSPLOSH_1, "player_lasersplosh_1", 133, 121, 480, effect);
+    DefSprite(PLAYER_LASERSPLOSH_2, "player_lasersplosh_2", 135, 119, 480, effect);
+    DefSprite(PLAYER_LASERSPLOSH_3, "player_lasersplosh_3", 131, 120, 480, effect);
+    DefSprite(BOSS_POWERGAUGE, "boss_powergauge", 69, 762, 480, effect);
+    DefSprite(BLACKHOLE, "blackhole", 128, 128, 480, boss);
+    DefSprite(FONT_DOYOUCONTINUE, "font_doyoucontinue", 512, 32, 480, font);
+    DefSprite(FONT_ALLSTAGECLEAR, "font_allstageclear", 512, 32, 480, font);
+    DefSprite(FONT_REST, "font_rest", 128, 32, 480, font);
+    DefSprite(FONT_STAGE, "font_stage", 256, 32, 480, font);
+    DefSprite(FONT_LINEOFZERO_000000, "font_000000", 256, 32, 480, font);
+    DefSprite(FONT_LINEOFZERO_0000000, "font_0000000", 256, 32, 480, font);
+    DefSprite(FONT_THANKYOU, "font_thankyou", 512, 32, 480, font);
+    DefSprite(FONT_NYSOFT, "font_nysoft", 512, 32, 480, font);
+    DefSprite(FONT_1997YGGDRASIL, "font_1997yggdrasil", 512, 32, 480, font);
+    DefSprite(FONT_SUPERDANDY, "font_superdandy", 256, 64, 480, font);
+    DefSprite(FONT_1997YAS_K, "font_1997yas_k", 512, 32, 480, font);
+    DefSprite(GUNBATTERY, "gunbattery", 128, 128, 480, chara);
+    DefSprite(PURPLECORE, "purplecore", 128, 128, 480, chara);
+    DefSprite(SPACEFISH, "spacefish", 128, 128, 480, chara);
+    DefSprite(MISSILE, "missile", 64, 128, 480, chara);
+    DefSprite(BOSS3_BODY, "boss3_body", 256, 256, 480, boss);
+    DefSprite(BODD4_BODY, "boss_4", 256, 256, 480, boss);
+    DefSprite(TITLEFONT_SUPER, "titlefont_super", 256, 256, 480, font);
+    DefSprite(TITLEFONT_BATTLE, "titlefont_battle", 256, 256, 480, font);
+    DefSprite(TITLEFONT_EMPEROR, "titlefont_emperor", 256, 256, 480, font);
+    DefSprite(GREENBARRIER, "greenbarrier", 130, 133, 480, effect);
+    DefSprite(REMAINDER, "remainder", 126, 34, 480, effect);
+    DefSprite(EARTH, "earth", 256, 256, 480, chara);
+    DefSprite(BOSS_CORPSE, "boss_corpse", 64, 256, 480, boss);
+
+    /*
+      for (i = 0; i < 12; i++) {
+      DefSprite(211 - i, 1, 0, 128 + i * 8, 16, 8, 480); 
+      }
+    */
+    //rank
+  
+    DefSprite(211, "rank_c_mins", 64, 32, 480, font);
+    DefSprite(210, "rank_c", 64, 32, 480, font);
+    DefSprite(209, "rank_c_pla", 64, 32, 480, font);
+    DefSprite(208, "rank_b_mins", 64, 32, 480, font);
+    DefSprite(207, "rank_b", 64, 32, 480, font);
+    DefSprite(206, "rank_b_pla", 64, 32, 480, font);
+    DefSprite(205, "rank_a_mins", 64, 32, 480, font);
+    DefSprite(204, "rank_a", 64, 32, 480, font);
+    DefSprite(203, "rank_a_pla", 64, 32, 480, font);
+    DefSprite(202, "rank_s", 64, 32, 480, font);
+	
+    //SDL_Joystick *joy=SDL_JoystickOpen(0);
+  
+    /*
+      GetPadBuf(&bb0, &bb1);
+      SsSetSerialAttr(SS_CD, SS_MIX, SS_SON);
+
+      Soundss();
+      SsSetSerialVol(SS_CD, 127, 127);
+      SsUtSetReverbType(SS_REV_TYPE_STUDIO_C);
+      SsUtReverbOn();
+  
+	
+      for (i = 0; i < 10; i++) {
+      buf = (unsigned char *) vh_addr[i] ;
+      if ((buf[0] != 'p') || (buf[1] != 'B') || (buf[2] != 'A')|| (buf[3] != 'V')) {
+      printf( "VAB not ready on the address at %lX\n",vh_addr[0]);
+      return;
+      }
+
+      vab[i] =
+      SsVabTransfer((unsigned char *) vh_addr[i],
+      (unsigned char *) vb_addr[i]
+      VH1_ADDR, VB1_ADDR 
+      , -1, 1);
+    
+      if (vab[i] < 0) {
+      printf( "VAB open failed(vab[i] = %d)\n", vab[i] );             
+      return;
+      }
+      }
+
+  
+      SsSetMVol(127, 127);
+      SsUtSetReverbDepth(40, 40);
+      SoundStop();
+      SoundPlay(0);
+      SoundStop();
+    */
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syokika.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,116 @@
+struct SDL_Surface *screen;
+
+typedef enum {
+    PLAYER_LEFTMOVE = 1,
+    PLAYER_TURNTOLEFT = 2,
+    PLAYER_IDLE = 3,
+    PLAYER_TURNTORIGHT = 4,
+    PLAYER_RIGHTMOVE = 5,
+    BLUEBULLET_LEFT = 6,
+    BLUEBULLET_RIGHT = 7,
+    REDBULLET = 8,
+    LONGLASER = 9,
+    GAUGE_PANEL = 10,
+    OFFENSIVEPOWER_GAUGE = 11,
+    BURNER = 12,
+    LOCKON_SIGHT = 13,
+    SPECIAL_LASERGAUGE = 14,
+    DIFFENSIVEPOWER_GAUGE = 15,
+    GREENBULLET = 16,
+    BULEBARRIER = 17,
+    FONT_PLAYER_1 = 18,
+    FONT_GAMEOVER = 19,
+    FONT_0 = 20,
+    FONT_1 = 21,
+    FONT_2 = 22,
+    FONT_3 = 23,
+    FONT_4 = 24,
+    FONT_5 = 25,
+    FONT_6 = 26,
+    FONT_7 = 27,
+    FONT_8 = 28,
+    FONT_9 = 29,
+    REDBOMB_ANIM_0 = 30,
+    REDBOMB_ANIM_1 = 31,
+    REDBOMB_ANIM_2 = 32,
+    REDBOMB_ANIM_3 = 33,
+    REDBOMB_ANIM_4 = 34,
+    REDBOMB_ANIM_5 = 35,
+    REDBOMB_ANIM_6 = 36,
+    REDBOMB_ANIM_7 = 37,
+    FONT_HIGE = 38,
+    GREENBOMB_ANIM_0 = 40,
+    GREENBOMB_ANIM_1 = 41,
+    GREENBOMB_ANIM_2 = 42,
+    GREENBOMB_ANIM_3 = 43,
+    GREENBOMB_ANIM_4 = 44,
+    GREENBOMB_ANIM_5 = 45,
+    GREENBOMB_ANIM_6 = 46,
+    GREENBOMB_ANIM_7 = 47,
+    INFLATION_GAUGE = 48,
+    INFLATION_METER = 49,
+    ENEMY_GREENCRAB = 50,
+    ENEMY_PLANE = 51,
+    ENEMY_REDBULLET = 52,
+    FONT_PUSHSTART = 53,
+    BOSS1_ORGAN = 54,
+    ENEMY_LASER = 55,
+    ENEMY_BLUEBULLET = 56,
+    ENEMY_LIGHTNING = 57,
+    ENEMY_LASERSPLOSH_0 = 58,
+    ENEMY_LASERSPLOSH_1 = 59,
+    ENEMY_LASERSPLOSH_2 = 60,
+    ENEMY_LASERSPLOSH_3 = 61,
+    ASTEROID = 62,
+    ORBITMACHINE = 63,
+    BOSS2_BODY = 64,
+    BOSS2_RIGHTSHOULDER = 65,
+    BOSS2_LEFTSHOULDER = 66,
+    BOSS2_RIGHTARM = 67,
+    BOSS2_LEFTARM = 68,
+    BOSS2_BATTERY = 69,
+    BOSS2_OPENBATTERY = 70,
+    BOSS2_BROKENHATCH = 71,
+    BOSS2_DUMMY = 72,
+    BOSS2_RIGHTSHOULDERUP = 73,
+    BOSS2_LEFTSHOULDERUP = 74,
+    BOSS2_LEFTSHOULDERGIRD = 75,
+    BOSS2_RIGHTARMBATTERY = 76,
+    BOSS2_LEFTARMBATTERY = 77,
+    BOSS2_RIGHTHAND = 78,
+    BOSS2_RIGHTPALM = 79,
+    BOSS2_LEFTHAND = 80,
+    BOSS2_LEFTPALM = 81,
+    PLAYER_LASERSPLOSH_0 = 90,
+    PLAYER_LASERSPLOSH_1 = 91,
+    PLAYER_LASERSPLOSH_2 = 92,
+    PLAYER_LASERSPLOSH_3 = 93,
+    BOSS_POWERGAUGE = 94,
+    BLACKHOLE = 100,
+    FONT_DOYOUCONTINUE = 110,
+    FONT_ALLSTAGECLEAR = 111,
+    FONT_REST = 112,
+    FONT_STAGE = 113,
+    FONT_LINEOFZERO_000000 = 114,
+    FONT_LINEOFZERO_0000000 = 115,
+    FONT_THANKYOU = 116,
+    FONT_NYSOFT = 117,
+    FONT_1997YGGDRASIL = 118,
+    FONT_SUPERDANDY = 119,
+    FONT_1997YAS_K = 120,
+    GUNBATTERY = 180,
+    PURPLECORE = 181,
+    SPACEFISH = 182,
+    MISSILE = 183,
+    BOSS3_BODY = 184,
+    BODD4_BODY = 185,
+    TITLEFONT_SUPER = 190,
+    TITLEFONT_BATTLE = 191,
+    TITLEFONT_EMPEROR = 192,
+    GREENBARRIER = 193,
+    REMAINDER = 194,
+    EARTH = 195,
+    BOSS_CORPSE = 196,
+} CharImageNumber;
+
+extern void syokika(int argc, char *argv[]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libxml/parser.h>
+#include "object.h"
+#include "sys.h"
+
+#define ALIGN_16BYTE 16
+
+int malloc_align16(void *free, void *aligned, int size)
+{
+  char *index;
+  unsigned int *f=(unsigned int *)free,*a=(unsigned int *)aligned;
+
+  if (free == NULL || aligned == NULL || size <= 0) return(-1);
+
+  index = (char *)malloc(size + ALIGN_16BYTE);
+  if (index == NULL)
+    {
+      return(-1);
+    }
+
+  *f = *a = (unsigned int)index;
+  if (((unsigned int)index % ALIGN_16BYTE) != 0)
+    {
+      index += ALIGN_16BYTE - ((unsigned int)index % ALIGN_16BYTE);
+      *a = (unsigned int)index;
+    }
+  return(0);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,3 @@
+int malloc_align16(void *free, void *aligned, int size);
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tama.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,98 @@
+#include <stdlib.h>
+#include "Enemy.h"
+#include "sankaku.h"
+#include"debug.h"
+#include <SDL_mixer.h>
+#include "sound.h"
+
+/*たまたまたま*/
+/*tama.h*/
+void Puttama(int type, float x, float y)
+{
+  PlaySdlMixer(0, SHOT_B) ;// Enemys atack !!
+    TFon();
+    switch (type) {
+    case 0:
+	Putenemy(3, x, y, 0, 2, 0);
+	Putenemy(3, x, y, (float) Mysin(15) * 2 / SANKAKU,
+		 (float) Mycos(15) * 2 / SANKAKU, 0);
+	Putenemy(3, x, y, (float) Mysin(30) * 2 / SANKAKU,
+		 (float) Mycos(30) * 2 / SANKAKU, 0);
+	Putenemy(3, x, y, (float) Mysin(-15) * 2 / SANKAKU,
+		 (float) Mycos(-15) * 2 / SANKAKU, 0);
+	Putenemy(3, x, y, (float) Mysin(-30) * 2 / SANKAKU,
+		 (float) Mycos(-30) * 2 / SANKAKU, 0);
+	break;
+    case 1:
+	Putenemy(3, x, y, (float) Mysin(rand() % 15) * 2 / SANKAKU,
+		 (float) Mycos(rand() % 15) * 2 / SANKAKU, 0);
+	Putenemy(3, x, y, (float) Mysin(rand() % 15) * 2 / SANKAKU,
+		 (float) Mycos(rand() % 15) * 2 / SANKAKU, 0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15)*2/SANKAKU,(float)Mycos(rand()%15)*2/SANKAKU,0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15)*2/SANKAKU,(float)Mycos(rand()%15)*2/SANKAKU,0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15)*2/SANKAKU,(float)Mycos(rand()%15)*2/SANKAKU,0);
+
+	Putenemy(3, x, y, (float) Mysin(rand() % 15 * -1) * 2 / SANKAKU,
+		 (float) Mycos(rand() % 15 * -1) * 2 / SANKAKU, 0);
+	Putenemy(3, x, y, (float) Mysin(rand() % 15 * -1) * 2 / SANKAKU,
+		 (float) Mycos(rand() % 15 * -1) * 2 / SANKAKU, 0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15*-1)*2/SANKAKU,(float)Mycos(rand()%15*-1)*2/SANKAKU,0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15*-1)*2/SANKAKU,(float)Mycos(rand()%15*-1)*2/SANKAKU,0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15*-1)*2/SANKAKU,(float)Mycos(rand()%15*-1)*2/SANKAKU,0);
+	break;
+
+    case 2:
+	Putenemy(6, x, y, 10, -3, 20);
+	break;
+    case 3:
+	Putenemy(6, x, y, -10, -3, 21);
+	break;
+    case 4:
+	Putenemy(7, x, y, 0, 15, 0);
+	break;
+    case 5:
+	Putenemy(8, x, y, 0, 30, 0);
+	break;
+    case 6:			//本体
+	Putenemy(10, x, y, 0, 0, 30);
+	break;
+    case 7:
+	Putenemy(6, x, y, 0, 4, 0);
+	Putenemy(6, x, y, (float) Mysin(15) * 4 / SANKAKU,
+		 (float) Mycos(15) * 4 / SANKAKU, 0);
+	Putenemy(6, x, y, (float) Mysin(30) * 4 / SANKAKU,
+		 (float) Mycos(30) * 4 / SANKAKU, 0);
+	Putenemy(6, x, y, (float) Mysin(-15) * 4 / SANKAKU,
+		 (float) Mycos(-15) * 4 / SANKAKU, 0);
+	Putenemy(6, x, y, (float) Mysin(-30) * 4 / SANKAKU,
+		 (float) Mycos(-30) * 4 / SANKAKU, 0);
+	break;
+    case 8:
+	Putenemy(3, x + 8, y + 8, -4, 0, 0);
+	Putenemy(3, x + 8, y + 8, 4, 0, 0);
+	Putenemy(3, x + 8, y, -4, Mysin(30) * -8 / SANKAKU, 0);
+	Putenemy(3, x + 8, y, 4, Mysin(30) * -8 / SANKAKU, 0);
+	break;
+    case 9:
+	Putenemy(3, x + 8, y, -4, Mysin(30) * -8 / SANKAKU, 0);
+	Putenemy(3, x + 8, y, 4, Mysin(30) * -8 / SANKAKU, 0);
+	Putenemy(3, x + 8, y, -4, Mysin(30) * 8 / SANKAKU, 0);
+	Putenemy(3, x + 8, y, 4, Mysin(30) * 8 / SANKAKU, 0);
+	break;
+    case 10:
+	Putenemy(3, x + 8, y, -4, 0, 0);
+	Putenemy(3, x + 8, y, 4, 0, 0);
+	Putenemy(3, x + 8, y, 0, 4, 0);
+	Putenemy(3, x + 8, y, 0, -4, 0);
+	break;
+    case 11:
+	{
+	    int a;
+	    a = rand() % 360;
+
+	    Putenemy(3, x + 8, y, (float) Mycos(a) / SANKAKU,
+		     (float) Mysin(a) / SANKAKU, 0);
+	}
+    }
+    TFoff();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tama.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,6 @@
+#ifndef _TAMA_H_
+#define _TAMA_H_
+
+extern void Puttama(int type, float x, float y);
+
+#endif				//_TAMA_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tama2.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,100 @@
+#include <stdlib.h>
+#include "Character.h"
+#include "Character_state.h"
+//#include "Enemy.h"
+#include "sankaku.h"
+#include"debug.h"
+#include <SDL_mixer.h>
+#include "sound.h"
+
+/*たまたまたま*/
+/*tama.h*/
+void Puttama(int type, float x, float y)
+{
+  PlaySdlMixer(0, SHOT_B) ;// Enemys atack !!
+    TFon();
+    switch (type) {
+    case 0:
+	Putenemy(3, x, y, 0, 2, chara_state0);
+	Putenemy(3, x, y, (float) Mysin(15) * 2 / SANKAKU,
+		 (float) Mycos(15) * 2 / SANKAKU, chara_state0);
+	Putenemy(3, x, y, (float) Mysin(30) * 2 / SANKAKU,
+		 (float) Mycos(30) * 2 / SANKAKU, chara_state0);
+	Putenemy(3, x, y, (float) Mysin(-15) * 2 / SANKAKU,
+		 (float) Mycos(-15) * 2 / SANKAKU, chara_state0);
+	Putenemy(3, x, y, (float) Mysin(-30) * 2 / SANKAKU,
+		 (float) Mycos(-30) * 2 / SANKAKU, chara_state0);
+	break;
+    case 1:
+	Putenemy(3, x, y, (float) Mysin(rand() % 15) * 2 / SANKAKU,
+		 (float) Mycos(rand() % 15) * 2 / SANKAKU, chara_state0);
+	Putenemy(3, x, y, (float) Mysin(rand() % 15) * 2 / SANKAKU,
+		 (float) Mycos(rand() % 15) * 2 / SANKAKU, chara_state0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15)*2/SANKAKU,(float)Mycos(rand()%15)*2/SANKAKU,chara_state0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15)*2/SANKAKU,(float)Mycos(rand()%15)*2/SANKAKU,chara_state0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15)*2/SANKAKU,(float)Mycos(rand()%15)*2/SANKAKU,chara_state0);
+
+	Putenemy(3, x, y, (float) Mysin(rand() % 15 * -1) * 2 / SANKAKU,
+		 (float) Mycos(rand() % 15 * -1) * 2 / SANKAKU, chara_state0);
+	Putenemy(3, x, y, (float) Mysin(rand() % 15 * -1) * 2 / SANKAKU,
+		 (float) Mycos(rand() % 15 * -1) * 2 / SANKAKU, chara_state0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15*-1)*2/SANKAKU,(float)Mycos(rand()%15*-1)*2/SANKAKU,chara_state0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15*-1)*2/SANKAKU,(float)Mycos(rand()%15*-1)*2/SANKAKU,chara_state0);
+//              Putenemy(3,x,y,(float) Mysin(rand()%15*-1)*2/SANKAKU,(float)Mycos(rand()%15*-1)*2/SANKAKU,chara_state0);
+	break;
+
+    case 2:
+	Putenemy(6, x, y, 10, -3, chara_state20);
+	break;
+    case 3:
+	Putenemy(6, x, y, -10, -3, chara_state21);
+	break;
+    case 4:
+	Putenemy(7, x, y, 0, 15, chara_state0);
+	break;
+    case 5:
+	Putenemy(8, x, y, 0, 30, chara_state0);
+	break;
+    case 6:			//本体
+	Putenemy(10, x, y, 0, 0, chara_state30);
+	break;
+    case 7:
+	Putenemy(6, x, y, 0, 4, chara_state0);
+	Putenemy(6, x, y, (float) Mysin(15) * 4 / SANKAKU,
+		 (float) Mycos(15) * 4 / SANKAKU, chara_state0);
+	Putenemy(6, x, y, (float) Mysin(30) * 4 / SANKAKU,
+		 (float) Mycos(30) * 4 / SANKAKU, chara_state0);
+	Putenemy(6, x, y, (float) Mysin(-15) * 4 / SANKAKU,
+		 (float) Mycos(-15) * 4 / SANKAKU, chara_state0);
+	Putenemy(6, x, y, (float) Mysin(-30) * 4 / SANKAKU,
+		 (float) Mycos(-30) * 4 / SANKAKU, chara_state0);
+	break;
+    case 8:
+	Putenemy(3, x + 8, y + 8, -4, 0, chara_state0);
+	Putenemy(3, x + 8, y + 8, 4, 0, chara_state0);
+	Putenemy(3, x + 8, y, -4, Mysin(30) * -8 / SANKAKU, chara_state0);
+	Putenemy(3, x + 8, y, 4, Mysin(30) * -8 / SANKAKU, chara_state0);
+	break;
+    case 9:
+	Putenemy(3, x + 8, y, -4, Mysin(30) * -8 / SANKAKU, chara_state0);
+	Putenemy(3, x + 8, y, 4, Mysin(30) * -8 / SANKAKU, chara_state0);
+	Putenemy(3, x + 8, y, -4, Mysin(30) * 8 / SANKAKU, chara_state0);
+	Putenemy(3, x + 8, y, 4, Mysin(30) * 8 / SANKAKU, chara_state0);
+	break;
+    case 10:
+	Putenemy(3, x + 8, y, -4, 0, chara_state0);
+	Putenemy(3, x + 8, y, 4, 0, chara_state0);
+	Putenemy(3, x + 8, y, 0, 4, chara_state0);
+	Putenemy(3, x + 8, y, 0, -4, chara_state0);
+	break;
+    case 11:
+	{
+	    int a;
+	    a = rand() % 360;
+
+	    Putenemy(3, x + 8, y, (float) Mycos(a) / SANKAKU,
+		     (float) Mysin(a) / SANKAKU, chara_state0);
+	}
+    }
+    TFoff();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testgl.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,525 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <SDL.h>
+#include <SDL_opengl.h>
+#include <SDL_image.h>
+#include "object.h"
+#include "xml.h"
+#include "Pad.h"
+
+
+static int power_of_two(int input)
+{
+  int value = 1;
+
+  while ( value < input )
+    {
+      value <<= 1;
+    }
+  return value;
+}
+
+
+GLuint SDL_GL_LoadTexture(SDL_Surface *surface, GLfloat *texcoord)
+{
+  GLuint texture;
+  int w, h;
+  SDL_Surface *image;
+  SDL_Rect area;
+  Uint32 saved_flags;
+  Uint8  saved_alpha;
+
+  /* Use the surface width and height expanded to powers of 2 */
+  w = power_of_two(surface->w);
+  h = power_of_two(surface->h);
+  texcoord[0] = 0.0f;                     /* Min X */
+  texcoord[1] = 0.0f;                     /* Min Y */
+  texcoord[2] = (GLfloat)surface->w / w;  /* Max X */
+  texcoord[3] = (GLfloat)surface->h / h;  /* Max Y */
+
+  image = SDL_CreateRGBSurface(
+			       SDL_SWSURFACE,
+			       w, h,
+			       32,
+#if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */
+			       0x000000FF, 
+			       0x0000FF00, 
+			       0x00FF0000, 
+			       0xFF000000
+#else
+			       0xFF000000,
+			       0x00FF0000, 
+			       0x0000FF00, 
+			       0x000000FF
+#endif
+			       );
+  if ( image == NULL )
+    {
+      return 0;
+    }
+
+  /* Save the alpha blending attributes */
+  saved_flags = surface->flags&(SDL_SRCALPHA|SDL_RLEACCELOK);
+  saved_alpha = surface->format->alpha;
+  if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA )
+    {
+      SDL_SetAlpha(surface, 0, 0);
+    }
+
+  /* Copy the surface into the GL texture image */
+  area.x = 0;
+  area.y = 0;
+  area.w = surface->w;
+  area.h = surface->h;
+  SDL_BlitSurface(surface, &area, image, &area);
+
+  /* Restore the alpha blending attributes */
+  if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA )
+    {
+      SDL_SetAlpha(surface, saved_flags, saved_alpha);
+    }
+
+  /* Create an OpenGL texture for the image */
+  glGenTextures(1, &texture);
+  glBindTexture(GL_TEXTURE_2D, texture);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+  glTexImage2D(GL_TEXTURE_2D,
+	       0,
+	       GL_RGBA,
+	       w, h,
+	       0,
+	       GL_RGBA,
+	       GL_UNSIGNED_BYTE,
+	       image->pixels);
+  SDL_FreeSurface(image); /* No longer needed */
+
+  return texture;
+}
+
+/*
+float tes_angle[3] = {0,0,0};
+void obj_draw(SURFACE *surfaces)
+{
+  int n;
+
+  glEnable(GL_TEXTURE_2D);
+  glBindTexture(GL_TEXTURE_2D, (GLuint)surfaces->texture);
+
+  glTranslatef(surfaces->xyz[0],surfaces->xyz[1],surfaces->xyz[2]);
+
+  glTranslatef(*(surfaces->data[2][0]), *(surfaces->data[2][0]+1), *(surfaces->data[2][0]+2));
+
+  glRotatef(surfaces->angle[0], 1, 0, 0);
+  glRotatef(surfaces->angle[1], 0, 1, 0);
+  glRotatef(surfaces->angle[2], 0, 0, 1);
+  
+  glTranslatef(-*(surfaces->data[2][0]), -*(surfaces->data[2][0]+1), -*(surfaces->data[2][0]+2));
+  
+  glBegin( GL_TRIANGLES);
+  for(n=0; n<surfaces->size; n++)
+    {
+      glTexCoord2f(*(surfaces->data[3][n]),*(surfaces->data[3][n]+1));
+      glVertex3f(*(surfaces->data[0][n]),*(surfaces->data[0][n]+1),*(surfaces->data[0][n]+2));
+      glNormal3f(*(surfaces->data[1][n]),*(surfaces->data[1][n]+1),*(surfaces->data[1][n]+2));
+    }
+  glEnd( );
+  glDisable(GL_TEXTURE_2D);
+}
+*/
+
+
+static SURFACE *next_draw_node(SURFACE *surfaces)
+{
+  SURFACE *node = surfaces;
+  if(node->child != NULL)
+    {
+      glPushMatrix();
+      return node->child;
+    }
+  else if(node->brother != NULL)
+    {
+      glPopMatrix();
+      glPushMatrix();
+      return node->brother;
+    }
+  else
+    {
+      node = node->parent;
+      if(node != NULL)
+	{
+	  glPopMatrix();
+	}
+      while(node != NULL)
+        {
+          if(node->brother != NULL)
+            {
+	      glPopMatrix();
+	      glPushMatrix();
+	      return node->brother;
+            }
+          else
+            {
+              node = node->parent;
+	      if(node != NULL)
+		{
+		  glPopMatrix();
+		}
+            }
+        }
+      return NULL;
+    }
+}
+
+SURFACE *search_node(OBJECT *top, char *name)
+{
+  SURFACE *node;
+  node = top->surfaces;
+  while(node != NULL)
+    {
+      node = next_draw_node(node);
+      if(!strcmp(node->image_name, name)
+	{
+	  return node;
+	}
+    }
+}
+
+void all_obj_draw(OBJECT *top)
+{
+  SURFACE *node;
+  node = top->surfaces;
+  glPushMatrix();
+  while(node != NULL)
+    {
+      obj_draw(node);
+      //if(node->child != NULL)
+	{
+	  node = next_draw_node(node);
+	}
+      /*
+      else
+	{
+	  //node = node->next;
+	}
+      */
+    }
+  glPopMatrix();
+}
+
+
+static SURFACE *next_node(SURFACE *surfaces)
+{
+  SURFACE *node = surfaces;
+  if(node->child != NULL)
+    {
+      return node->child;
+    }
+  else if(node->brother != NULL)
+    {
+      return node->brother;
+    }
+  else
+    {
+      node = node->parent;
+      while(node != NULL)
+        {
+          if(node->brother != NULL)
+            {
+	      return node->brother;
+            }
+          else
+            {
+              node = node->parent;
+            }
+        }
+      return NULL;
+    }
+}
+
+
+
+
+
+void node_draw(OBJECT *top, char *name)
+{
+  SURFACE *node;
+  for(node=top->surfaces; node!=NULL; node=next_node(node))
+    {
+      if(!strcmp(node->name, name))
+        {
+	  glPushMatrix();
+          obj_draw(node);
+	  glPopMatrix();
+        }
+    }
+}
+
+
+
+void node_prameter_change(OBJECT *top, char *name, float x, float y, float z, float ax, float ay, float az)
+{
+  SURFACE *node;
+  for(node=top->surfaces; node!=NULL; node=next_node(node))
+    {
+      if(!strcmp(node->name, name))
+      {
+	node->xyz[0] = x;
+	node->xyz[1] = y;
+	node->xyz[2] = z;
+	node->angle[0] = ax;
+	node->angle[1] = ay;
+	node->angle[2] = az;
+      }
+    }
+}
+
+void all_object_load_texture(OBJECT *top)
+{
+  SURFACE *node;
+  SDL_Surface *image;
+  GLfloat texcoord[4];
+  for(node=top->surfaces; node!=NULL; node=next_node(node))
+    { 
+      //image = SDL_LoadBMP(node->image_name);
+      //image = IMG_Load(node->image_name);
+      image = LoadSprite(node, image);
+      node->texture = (int *)SDL_GL_LoadTexture(image, texcoord);
+      SDL_FreeSurface(image);
+    }
+}
+	 
+
+int RunGLTest( int argc, char* argv[], int bpp, int width, int height)
+{
+  int i;
+  int rgb_size[3];
+  int w = width;
+  int h = height;
+  int done = 0;
+  int frames;
+  Uint32 start_time, this_time;
+
+  Uint32 video_flags;
+  int value;
+
+  OBJECT *obj;
+  obj = read_xml_3d_file(argv[1]);
+
+
+  if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
+    {
+      fprintf(stderr,"Couldn't initialize SDL: %s\n",SDL_GetError());
+      exit( 1 );
+    }
+
+  /* See if we should detect the display depth */
+  if ( bpp == 0 ) 
+    {
+      if ( SDL_GetVideoInfo()->vfmt->BitsPerPixel <= 8 ) 
+	{
+	  bpp = 8;
+	}
+      else 
+	{
+	  bpp = 16;  /* More doesn't seem to work */
+	}
+    }
+
+  //video_flags = SDL_OPENGLBLIT;
+  video_flags = SDL_OPENGL;
+  
+  for ( i=1; argv[i]; ++i ) 
+    {
+      if ( strcmp(argv[i], "-fullscreen") == 0 ) 
+	{
+	  video_flags |= SDL_FULLSCREEN;
+	}
+    }
+
+  /* Initialize the display */
+  switch (bpp) 
+    {
+    case 8:
+      rgb_size[0] = 3;
+      rgb_size[1] = 3;
+      rgb_size[2] = 2;
+      break;
+    case 15:
+    case 16:
+      rgb_size[0] = 5;
+      rgb_size[1] = 5;
+      rgb_size[2] = 5;
+      break;
+    default:
+      rgb_size[0] = 8;
+      rgb_size[1] = 8;
+      rgb_size[2] = 8;
+      break;
+    }
+  SDL_GL_SetAttribute( SDL_GL_RED_SIZE, rgb_size[0] );
+  SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, rgb_size[1] );
+  SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, rgb_size[2] );
+  SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );
+  SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
+
+  SDL_GL_SetAttribute( SDL_GL_SWAP_CONTROL, 0 );
+  
+  if ( SDL_SetVideoMode( w, h, bpp, video_flags ) == NULL ) 
+    {
+      fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError());
+      SDL_Quit();
+      exit(1);
+    }
+
+  printf("Screen BPP: %d\n", SDL_GetVideoSurface()->format->BitsPerPixel);
+  printf("\n");
+  printf( "Vendor     : %s\n", glGetString( GL_VENDOR ) );
+  printf( "Renderer   : %s\n", glGetString( GL_RENDERER ) );
+  printf( "Version    : %s\n", glGetString( GL_VERSION ) );
+  printf( "Extensions : %s\n", glGetString( GL_EXTENSIONS ) );
+  printf("\n");
+  
+  SDL_GL_GetAttribute( SDL_GL_RED_SIZE, &value );
+  printf( "SDL_GL_RED_SIZE: requested %d, got %d\n", rgb_size[0],value);
+  SDL_GL_GetAttribute( SDL_GL_GREEN_SIZE, &value );
+  printf( "SDL_GL_GREEN_SIZE: requested %d, got %d\n", rgb_size[1],value);
+  SDL_GL_GetAttribute( SDL_GL_BLUE_SIZE, &value );
+  printf( "SDL_GL_BLUE_SIZE: requested %d, got %d\n", rgb_size[2],value);
+  SDL_GL_GetAttribute( SDL_GL_DEPTH_SIZE, &value );
+  printf( "SDL_GL_DEPTH_SIZE: requested %d, got %d\n", bpp, value );
+  SDL_GL_GetAttribute( SDL_GL_DOUBLEBUFFER, &value );
+  printf( "SDL_GL_DOUBLEBUFFER: requested 1, got %d\n", value );
+  
+  
+  /* Set the window manager title bar */
+  SDL_WM_SetCaption( "SDL GL test", "testgl" );
+  
+  glViewport( 0, 0, w, h );
+  glMatrixMode( GL_PROJECTION );
+  glLoadIdentity( );
+  
+  glOrtho( -40.0, 40.0, -40.0, 40.0, -400.0, 400.0 );
+  
+  glMatrixMode( GL_MODELVIEW );
+  glLoadIdentity( );
+  
+  glEnable(GL_DEPTH_TEST);
+  
+  glDepthFunc(GL_LESS);
+  
+  glShadeModel(GL_SMOOTH);
+
+
+  //load texture image
+  all_object_load_texture(obj);
+
+  
+  /* Loop until done. */
+  start_time = SDL_GetTicks();
+  frames = 0;
+  while( !done ) 
+    {
+      GLenum gl_error;
+      char* sdl_error;
+      SDL_Event event;
+      while(SDL_PollEvent(&event))
+	{
+	  if(event.type==SDL_QUIT) goto QUIT;
+	}
+      
+      /* Do our drawing, too. */
+      glClearColor( 0.0, 0.0, 0.0, 1.0 );
+      glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+      Pad();
+  
+      //node_prameter_change(obj, "Cube", 0, 0, 0, 0, 1, 0);
+      //node_prameter_change(obj, "Sphere.001", 0, 0, 0, 0, 1, 0);
+      //node_prameter_change(obj, "Plane", 0, 0, 0, 0, 1, 0);
+      //node_prameter_change(obj, "Plane.001", 0, 0, 0, 0, 1, 0);
+      //node_prameter_change(obj, "Sphere", 0, 0, 0, 0, 1, 0);
+  
+      all_obj_draw(obj);
+      //node_draw(obj, "Cube");
+
+      glMatrixMode(GL_MODELVIEW);
+      //glRotatef(1.0, 1.0, 1.0, 1.0);
+      /*
+      if(pad[0].up > 0)
+	{
+	  node_prameter_change(obj, "Plane", 0, 1, 0, 0, 0, 0);
+	}
+      else if(pad[0].down > 0)
+	{
+	  node_prameter_change(obj, "Plane", 0, -1, 0, 0, 0, 0);
+	}
+
+      if(pad[0].right > 0)
+	{
+	  node_prameter_change(obj, "Plane", 1, 0, 0, 0, 0, 0);
+	}
+      else if(pad[0].left > 0)
+	{
+	  node_prameter_change(obj, "Plane", -1, 0, 0, 0, 0, 0);
+	}
+      */
+      SDL_GL_SwapBuffers( );
+      
+      /* Check for error conditions. */
+      gl_error = glGetError( );
+      
+      if( gl_error != GL_NO_ERROR ) 
+	{
+	  fprintf( stderr, "testgl: OpenGL error: %s\n", (char *)gl_error );
+	}
+      
+      sdl_error = SDL_GetError( );
+      
+      if( sdl_error[0] != '\0' ) 
+	{
+	  fprintf(stderr, "testgl: SDL error '%s'\n", sdl_error);
+	  SDL_ClearError();
+	}
+     
+      ++frames;
+    }
+  
+  /* Destroy our GL context, etc. */
+ QUIT:
+  /* Print out the frames per second */
+  this_time = SDL_GetTicks();
+  if ( this_time != start_time ) 
+    {
+      printf("%2.2f FPS\n",((float)frames/(this_time-start_time))*1000.0);
+    }
+  SDL_Quit( );
+  return(0);
+}
+
+int main(int argc, char *argv[])
+{
+  int i;
+  int bpp = 0;
+  int width = 640;
+  int height = 480;
+  for ( i=1; argv[i]; ++i )
+    {
+      if ( strcmp(argv[i], "-bpp") == 0 )
+	{
+	  bpp = atoi(argv[++i]);
+	}
+      if ( strcmp(argv[i], "-width") == 0 )
+	{
+	  width = atoi(argv[++i]);
+	} 
+      if ( strcmp(argv[i], "-height") == 0 ) 
+	{
+	  height = atoi(argv[++i]);
+	}
+    }
+  RunGLTest(argc, argv, bpp, width, height);
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testgl.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,5 @@
+#ifndef TESTGL_H
+#define TESTGL_H
+extern void all_object_load_texture(OBJECT *top);
+#endif TESTGL_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/texture.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,6 @@
+GLuint texture[250] = {0};
+GLfloat texMaxX[250] = {0};
+GLfloat texMaxY[250] = {0};
+GLfloat texMinX[250] = {0};
+GLfloat texMinY[250] = {0};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tokuten.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,160 @@
+#include <SDL.h>
+#include "object.h"
+#include "tokuten.h"
+#include "bom.h"
+#include "bool.h"
+//#include "libps.h"
+#include "sgoex.h"
+#include "count2.h"
+#include "SDL_opengl.h"
+int enemycount = 0;
+int higecount = 0;
+int stcount = 0;
+
+/*エンヂング集計用*/
+int clear_result[4];
+int end_jiki_x;
+int end_jiki_y;
+int end_jiki_v;
+int end_jiki_vx;
+int end_jiki_vy;
+int end_jiki_size;
+
+/*エクステンド*/
+int p_extend = 200000;
+
+void tokuten()
+{
+    int i;
+
+    int ten1, ten2, ten3, ten4, keta = 1000000000;
+    if (enemycount > higecount)
+	higecount = enemycount;
+    ten2 = enemycount;
+    ten4 = higecount;
+    for (i = 0; i < 10; i++) {
+	ten1 = ten2 / keta;
+	ten3 = ten4 / keta;
+
+		//score
+	count++;
+	PutSprite(count, 32*(i+32)-800, 20, 20 + ten1);
+	count++;
+	PutSprite(count, 728 + 32 * i, 20, 20 + ten3);
+
+	ten2 -= ten1 * keta;
+	ten4 -= ten3 * keta;
+	keta /= 10;
+    }
+    count++;
+    PutSprite(count, 90, 20, 18); //1P
+    count++;
+    PutSprite(count, 600, 20, 38);// HIGE
+
+    if (enemycount >= p_extend) {
+	if (p_extend == 1000000) {
+	    p_extend = 1999999999;
+	    jiki.zanki++;
+	}
+	if (p_extend == 200000) {
+	    p_extend = 1000000;
+	    jiki.zanki++;
+	}
+    }
+}
+
+void Endingscore(int fc)
+{
+    int i, a, b;
+    /*all stage clear */
+    if (fc < 600) {
+	count++;
+	PutSprite(count, 600, 100, 111);
+    }
+    /*rest */
+    if (fc > 120 && fc < 600 && jiki.ccount > 2) {
+	a = jiki.zanki - 1;
+	if (a != 0) {
+	    count++;
+	    PutSprite(count, 600, 160, 112); //REST
+	    count++;
+	    PutSprite(count, 800, 160, 20 + a); 
+	    count++;
+	    PutSprite(count, 832, 160, 115);//0000000
+	}
+    }
+    /*result stage */
+    for (i = 0; i < 4; i++) {
+	if (fc > 200 + i * 60 && fc < 600 && jiki.ccount > 2) {
+	    a = clear_result[i];
+	    count++;
+	    PutSprite(count, 400, 212 + i * 48, 113);	/*stage */
+			//	    PutSprite(count, 64, 112 + i * 24, 113);	/*stage */
+			count++;
+			PutSprite(count, 300 + 40, 212 + i * 48, 21 + i);	/*1kara4 */
+			//	    PutSprite(count, 64 + 40, 112 + i * 24, 21 + i);	/*1kara4 */
+
+	    count++;
+			PutSprite(count, 800, 220 + i * 48, 200 + a);
+			//	    PutSprite(count, 400, 120 + i * 24, 200 + a);
+
+	    b = a * (i + 1);
+	    count++;
+			PutSprite(count, 800, 220 + i * 48, 20 + b / 10);
+			//	    PutSprite(count, 500, 120 + i * 24, 20 + b / 10);
+	    count++;
+			PutSprite(count, 800, 220 + i * 48, 20 + b % 10);
+			//	    PutSprite(count, 600, 120 + i * 24, 20 + b % 10);
+
+	    count++;
+			PutSprite(count, 832, 220 + i * 48, 114); // 000000
+			//	    PutSprite(count, 600, 120 + i * 24, 114);
+	}
+    }
+    if (fc == 560 && jiki.ccount > 2) {
+	enemycount += (jiki.zanki - 1) * 10000000 +
+	    clear_result[0] * 1000000 +
+	    clear_result[1] * 2000000 +
+	    clear_result[2] * 3000000 + clear_result[3] * 5000000;
+	return;
+    }
+    /*エンディング準備 */
+    if (fc == 600) {
+	jiki.bf = FALSE;
+	//	end_jiki_vx = (640 - 64) - jiki.x;
+	//	end_jiki_vy = (230 - 64) - jiki.y;
+	end_jiki_x = 1200;
+	end_jiki_y = 880;
+	end_jiki_size = 2;
+	return;
+    }
+    if (fc > 601) {
+	if (fc < 1112) {
+	  end_jiki_x -= 0.2;
+	  end_jiki_y -= 0.05;
+	    end_jiki_size -= 0.005;
+	}
+	jiki.bf = FALSE;
+
+	if (fc > 720 && fc < 840) {
+	    count++;
+	    PutSprite(count, 800, 400, 116);
+	}
+
+	if (fc > 960) {
+	    count++;
+	    PutSprite(count, 1000, 800, 117); //	    PutSprite(count, 128, 72, 117);
+	    count++;
+	    PutSprite(count, 1000, 840, 118); //	    PutSprite(count, 128, 88, 118);
+	    count++;
+	    PutSprite(count, 1000, 880, 120); // 	    PutSprite(count, 128, 104, 120);
+	}
+
+	count++;
+	//	PutSprite(count, end_jiki_x / 4096, end_jiki_y / 4096, 3);
+	PutSpriteEx(3, end_jiki_x, end_jiki_y, end_jiki_size, end_jiki_size, 1);
+	count++;
+	//	PutSprite(count, 160 - 30, 64, 195);
+	PutSpriteEx(195, 180, 200, 2 - end_jiki_size, 2 - end_jiki_size, 1);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tokuten.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,13 @@
+#ifndef _TOKUTEN_H_
+#define _TOKUTEN_H_
+
+extern int enemycount;
+
+extern void tokuten();
+extern void Endingscore(int fc);
+
+extern int p_extend;
+
+extern int clear_result[4];
+
+#endif				//_TOKUTEN_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trace.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,82 @@
+#include<stdio.h>
+
+#define PAD_BUFSIZ 32
+#define RESET_BUTTON 768
+
+#ifdef ENABLE_TRACEMODE
+
+static FILE *pad_fp;
+static char pad_buf[PAD_BUFSIZ];
+
+void pad_trace(unsigned int pad)
+{
+    fprintf(pad_fp, "%d\n", pad);
+}
+
+int pad_file_open(char *f)
+{
+    pad_fp = fopen(f, "r+");
+    if (!pad_fp) {
+// 本当はerrnoをチェックするのがいいんだろうなぁ
+	pad_fp = fopen(f, "w+");
+	if (pad_fp) {
+	    return 0;
+	}
+//        goto dbg_abort(4);
+	return 1;
+    }
+    return 0;
+}
+
+int pad_file_read()
+{
+    int padd;
+    if (fgets(pad_buf, PAD_BUFSIZ, pad_fp)) {
+	sscanf(pad_buf, "%d", &padd);
+	return padd;
+    }
+    return RESET_BUTTON;
+}
+#endif				//ENABLE_TRACEMODE
+
+#ifdef USE_MYRAND
+static FILE *myrand_fp;
+extern int runmode;
+
+int myrand_open_file(char *filename)
+{
+    myrand_fp = fopen(filename, "r+");
+    if (!myrand_fp) {
+	myrand_fp = fopen(filename, "w+");
+	if (myrand_fp) {
+	    return 0;
+	} else {
+	    return 1;
+	}
+    }
+    return 0;
+}
+
+static char buf[16];
+
+int myrand()
+{
+    int r = 0;
+    if (runmode) {
+	if (runmode == 1) {
+	    r = rand();
+	    fprintf(myrand_fp, "%d\n", r);
+	} else if (runmode == 2) {
+//            dbg_printf("check0\n");
+	    if (fgets(buf, 16, myrand_fp)) {
+		sscanf(buf, "%d", &r);
+	    } else {
+		fseek(myrand_fp, 0, SEEK_SET);
+	    }
+	}
+    } else {
+	r = rand();
+    }
+    return r;
+}
+#endif				// USE_MYRAND
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trace.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,3 @@
+extern void pad_trace(int);
+extern void pad_file_open(char *f);
+extern int pad_file_read();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tree_controll.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,296 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <SDL.h>
+#include <SDL_opengl.h>
+#include <SDL_image.h>
+#include "object.h"
+#include "tree_controll.h"
+#include "LoadSprite.h"
+#include "xml.h"
+
+
+static int power_of_two(int input)
+{
+  int value = 1;
+
+  while ( value < input )
+    {
+      value <<= 1;
+    }
+  return value;
+}
+
+
+GLuint SDL_GL_LoadTexture(SDL_Surface *surface, GLfloat *texcoord)
+{
+  GLuint texture;
+  int w, h;
+  SDL_Surface *image;
+  SDL_Rect area;
+  Uint32 saved_flags;
+  Uint8  saved_alpha;
+
+  /* Use the surface width and height expanded to powers of 2 */
+  w = power_of_two(surface->w);
+  h = power_of_two(surface->h);
+  texcoord[0] = 0.0f;                     /* Min X */
+  texcoord[1] = 0.0f;                     /* Min Y */
+  texcoord[2] = (GLfloat)surface->w / w;  /* Max X */
+  texcoord[3] = (GLfloat)surface->h / h;  /* Max Y */
+
+  image = SDL_CreateRGBSurface(
+			       SDL_SWSURFACE,
+			       w, h,
+			       32,
+#if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */
+			       0x000000FF, 
+			       0x0000FF00, 
+			       0x00FF0000, 
+			       0xFF000000
+#else
+			       0xFF000000,
+			       0x00FF0000, 
+			       0x0000FF00, 
+			       0x000000FF
+#endif
+			       );
+  if ( image == NULL )
+    {
+      return 0;
+    }
+
+  /* Save the alpha blending attributes */
+  saved_flags = surface->flags&(SDL_SRCALPHA|SDL_RLEACCELOK);
+  saved_alpha = surface->format->alpha;
+  if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA )
+    {
+      SDL_SetAlpha(surface, 0, 0);
+    }
+
+  /* Copy the surface into the GL texture image */
+  area.x = 0;
+  area.y = 0;
+  area.w = surface->w;
+  area.h = surface->h;
+  SDL_BlitSurface(surface, &area, image, &area);
+
+  /* Restore the alpha blending attributes */
+  if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA )
+    {
+      SDL_SetAlpha(surface, saved_flags, saved_alpha);
+    }
+
+  /* Create an OpenGL texture for the image */
+  glGenTextures(1, &texture);
+  glBindTexture(GL_TEXTURE_2D, texture);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+  glTexImage2D(GL_TEXTURE_2D,
+	       0,
+	       GL_RGBA,
+	       w, h,
+	       0,
+	       GL_RGBA,
+	       GL_UNSIGNED_BYTE,
+	       image->pixels);
+  SDL_FreeSurface(image); /* No longer needed */
+
+  return texture;
+}
+
+
+float tes_angle[3] = {0,0,0};
+/*
+void obj_draw(SURFACE *surfaces)
+{
+  int n;
+
+  glEnable(GL_TEXTURE_2D);
+  glBindTexture(GL_TEXTURE_2D, (GLuint)surfaces->texture);
+
+  glTranslatef(surfaces->xyz[0],surfaces->xyz[1],surfaces->xyz[2]);
+
+  glTranslatef(*(surfaces->data[2][0]), *(surfaces->data[2][0]+1), *(surfaces->data[2][0]+2));
+
+  glRotatef(surfaces->angle[0], 1, 0, 0);
+  glRotatef(surfaces->angle[1], 0, 1, 0);
+  glRotatef(surfaces->angle[2], 0, 0, 1);
+  
+  glTranslatef(-*(surfaces->data[2][0]), -*(surfaces->data[2][0]+1), -*(surfaces->data[2][0]+2));
+  
+  glBegin( GL_TRIANGLES);
+  for(n=0; n<surfaces->size; n++)
+    {
+      glTexCoord2f(*(surfaces->data[3][n]),*(surfaces->data[3][n]+1));
+      glVertex3f(*(surfaces->data[0][n]),*(surfaces->data[0][n]+1),*(surfaces->data[0][n]+2));
+      glNormal3f(*(surfaces->data[1][n]),*(surfaces->data[1][n]+1),*(surfaces->data[1][n]+2));
+    }
+  glEnd( );
+  glDisable(GL_TEXTURE_2D);
+}
+*/
+
+
+SURFACE *next_draw_node(SURFACE *surfaces)
+{
+  SURFACE *node = surfaces;
+  if(node->child != NULL)
+    {
+      //glPushMatrix();
+      return node->child;
+    }
+  else if(node->brother != NULL)
+    {
+      //glPopMatrix();
+      //glPushMatrix();
+      return node->brother;
+    }
+  else
+    {
+      node = node->parent;
+      if(node != NULL)
+	{
+	  //glPopMatrix();
+	}
+      while(node != NULL)
+        {
+          if(node->brother != NULL)
+            {
+	      //glPopMatrix();
+	      //glPushMatrix();
+	      return node->brother;
+            }
+          else
+            {
+              node = node->parent;
+	      /*
+	      if(node != NULL)
+		{
+		  //glPopMatrix();
+		}
+	      */
+            }
+        }
+      return NULL;
+    }
+}
+
+SURFACE *search_node(OBJECT *top, char *name)
+{
+  SURFACE *node;
+  SURFACE *ret_node = NULL;
+  for(node = top->surfaces;node != NULL;node = next_node(node))
+    {
+      if(strcmp(node->name, name) == 0)
+	{
+	  ret_node = node;
+	  return ret_node;
+	}
+    }
+  printf("can't not find node\n");
+  return ret_node;
+}
+/*
+void all_obj_draw(OBJECT *top)
+{
+  SURFACE *node;
+  node = top->surfaces;
+  glPushMatrix();
+  while(node != NULL)
+    {
+      obj_draw(node);
+      //if(node->child != NULL)
+	{
+	  node = next_draw_node(node);
+	}
+	//
+      else
+	{
+	  //node = node->next;
+	}
+      //
+    }
+  glPopMatrix();
+}
+*/
+
+SURFACE *next_node(SURFACE *surfaces)
+{
+  SURFACE *node = surfaces;
+  if(node->child != NULL)
+    {
+      return node->child;
+    }
+  else if(node->brother != NULL)
+    {
+      return node->brother;
+    }
+  else
+    {
+      node = node->parent;
+      while(node != NULL)
+        {
+          if(node->brother != NULL)
+            {
+	      return node->brother;
+            }
+          else
+            {
+              node = node->parent;
+            }
+        }
+      return NULL;
+    }
+}
+
+/*
+void node_draw(OBJECT *top, char *name)
+{
+  SURFACE *node;
+  for(node=top->surfaces; node!=NULL; node=next_node(node))
+    {
+      if(!strcmp(node->name, name))
+        {
+	  glPushMatrix();
+          obj_draw(node);
+	  glPopMatrix();
+        }
+    }
+}
+*/
+
+
+void node_prameter_change(OBJECT *top, char *name, float x, float y, float z, float ax, float ay, float az)
+{
+  SURFACE *node;
+  for(node=top->surfaces; node!=NULL; node=next_node(node))
+    {
+      if(!strcmp(node->name, name))
+      {
+	node->xyz[0] = x;
+	node->xyz[1] = y;
+	node->xyz[2] = z;
+	node->angle[0] = ax;
+	node->angle[1] = ay;
+	node->angle[2] = az;
+      }
+    }
+}
+	 
+void all_object_load_texture(OBJECT *top)
+{
+  SURFACE *node;
+  SDL_Surface *image;
+  GLfloat texcoord[4];
+  for(node=top->surfaces; node!=NULL; node=next_node(node))
+    { 
+      //image = SDL_LoadBMP(node->image_name);
+      //image = IMG_Load(node->image_name);
+      image = LoadSprite(node);
+      node->texture = (int *)SDL_GL_LoadTexture(image, texcoord);
+      SDL_FreeSurface(image);
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tree_controll.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,8 @@
+GLuint SDL_GL_LoadTexture(SDL_Surface *surface, GLfloat *texcoord);
+SURFACE *next_draw_node(SURFACE *surface);
+//void obj_draw(SURFACE *surfaces);
+SURFACE *search_node(OBJECT *top, char *name);
+SURFACE *next_node(SURFACE *surfaces);
+//void node_draw(OBJECT *top, char *name);
+void node_prameter_change(OBJECT *top, char *name, float x, float y, float z, float ax, float ay, float az);
+//void all_object_load_texture(OBJECT *top);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml.c	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,416 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <libxml/parser.h>
+#include "object.h"
+#include "sys.h"
+#include "xml.h"
+
+#include "error.h"
+
+#define ALIGN_16BYTE 16
+
+extern int decode(char *cont, FILE *outfile);
+
+static inline char *skip_to_number(char *cont)
+{
+    if (cont == NULL) return(NULL);
+    for (;(*cont < '+' || *cont > '9') && (*cont != '\0');cont++) {}
+    if (*cont == '\0')
+    {
+	fprintf(stderr,"Content data is short\n");
+	return(NULL);
+    }
+    return(cont);
+}
+
+
+static inline char *pickup_exponent(int *exp, char *cont)
+{
+    int n,value=0,shift=10;
+
+    if (*cont == ',' || *cont == '\n') return(NULL);
+
+    for (;*cont != ',' && *cont != '\n' && *cont != '\t';cont++)
+    {
+	if (*cont == '-')
+	{
+	    shift = 0.1;
+	}
+	else if (*cont >= '0' && *cont <= '9')
+	{
+	    value *= 10;
+	    value += *cont - 48;
+	}
+	else if (*cont == '+' || *cont == ' ')
+	{
+	    // ignore
+	}
+	else
+	{
+	    fprintf(stderr,"Pick up exponent failed : %c(%d)\n",*cont,*cont);
+	    return(NULL);
+	}
+    }
+  
+    for (n=0;n < value;n++) shift *= shift;
+
+    if (value == 0)
+    {
+	*exp = 1;
+    }
+    else
+    {
+	*exp = shift;
+    }
+    return(cont-1);
+}
+
+
+static inline char *pickup_float(char *cont, float *index)
+{
+    int sign=1,exp=1;
+    float shift=10,val_dec=0,val_int=0;
+
+    cont = skip_to_number(cont);
+    if (cont == NULL) return(NULL);
+
+    for (;*cont != ',' && *cont != '\n' && *cont != '\t';cont++)
+    {
+	if (*cont == '-')
+	{
+	    sign = -1;
+	}
+	else if (*cont == '.')
+	{
+	    shift = 0.1;
+	}
+	else if (*cont >= '0' && *cont <= '9')
+	{
+	    if (shift == 10)
+	    {
+		val_int *= shift;
+		val_int += *cont - 48;
+	    }
+	    else
+	    {
+		val_dec += (*cont - 48) * shift;
+		shift *= 0.1;
+	    }
+	}
+	else if (*cont == 'e' || *cont == 'E')
+	{
+	    cont = pickup_exponent(&exp,cont+1);
+	    if (cont == NULL) return(NULL);
+	}
+	else if (*cont == '+' || *cont == '/' || *cont == ' ')
+	{
+	    // ignore
+	}
+	else
+	{
+	    fprintf(stderr,"Pick up float failed : %c(%d)\n",*cont,*cont);
+	    return(NULL);
+	}
+    }
+  
+    *index = sign * (val_int + val_dec) * exp;
+    cont++;
+    return(cont);
+}
+
+
+static FVECTOR *get_surface_data(SURFACE *surf, xmlNodePtr cur)
+{
+    int n;
+    char *cont;
+    float *index;
+    FVECTOR *data[4];
+    FILE *outfile = NULL;
+
+    /*    
+          data[0]: point position
+          data[1]: point direction
+          data[2]: point QT position
+          data[3]: point color
+    */
+  
+    data[0] = (FVECTOR *)malloc(sizeof(FVECTOR)*(surf->size)*4);
+    data[1] = data[0] + surf->size;
+    data[2] = data[1] + surf->size;
+    data[3] = data[2] + surf->size;
+    
+    for (;cur;cur=cur->next)
+    {
+	if (!xmlStrcmp(cur->name,(xmlChar*)"coordinate"))
+	{
+	    cont = (char *)xmlNodeGetContent(cur);
+	    for (n=0,index=(float*)data[0];n < surf->size;n++,index+=4)
+	    {
+		cont = pickup_float(cont,index);
+		cont = pickup_float(cont,index+1);
+		cont = pickup_float(cont,index+2);
+		index[3] = 1.0;
+
+		if (cont == NULL)
+		{
+		    fprintf(stderr,"Analyzing surface data failed coordinate\n");
+		    return(NULL);
+		}
+	    }
+	}
+	else if (!xmlStrcmp(cur->name,(xmlChar*)"normal"))
+	{
+	    cont = (char *)xmlNodeGetContent(cur);
+	    for (n=0,index=(float*)data[1];n < surf->size;n++,index+=4)
+	    {
+		cont = pickup_float(cont,index);
+		cont = pickup_float(cont,index+1);
+		cont = pickup_float(cont,index+2);
+		index[3] = 1.0;
+	      
+		if (cont == NULL)
+		{
+		    fprintf(stderr,"Analyzing surface data failed normal\n");
+		    return(NULL);
+		}
+	    }
+	}
+	else if (!xmlStrcmp(cur->name,(xmlChar*)"model"))
+	{
+	    cont = (char *)xmlNodeGetContent(cur);
+	    //for (n=0,index=(float*)data[2]; n < surf->size;n++,index+=4)
+	    for (n=0,index=(float*)data[2]; n < 1; n++,index+=4)
+	    {
+		cont = pickup_float(cont,index);
+		cont = pickup_float(cont,index+1);
+		cont = pickup_float(cont,index+2);
+		//cont = pickup_float(cont,index+3);
+		index[3] = 1.0;
+
+		if (cont == NULL)
+		{
+		    fprintf(stderr,"Analyzing surface data failed model\n");
+		    return(NULL);
+		}
+	    }
+	}
+	else if (!xmlStrcmp(cur->name,(xmlChar*)"texture"))
+	{
+	    cont = (char *)xmlNodeGetContent(cur);
+	    if (cont == NULL)
+	    {
+		for (n=0,index=(float*)data[3];n < surf->size;n++,index+=4)
+		{
+		    index[0] = 0.0;
+		    index[1] = 0.0;
+		    index[2] = 0.0;
+		    index[3] = 0.0;
+		}
+	    }	  
+	    else
+	    {
+		for (n=0,index=(float*)data[3]; n < surf->size; n++,index+=4)
+		{
+		    cont = pickup_float(cont,index);
+		    cont = pickup_float(cont,index+1);
+		    index[2] = 1.0;
+		    index[3] = 0.0;
+		  
+		    if (cont == NULL)
+		    {
+			fprintf(stderr,"Analyzing surface data failed last\n");
+			return(NULL);
+		    }
+		}
+	    }
+	}
+	else if(!xmlStrcmp(cur->name,(xmlChar*)"image"))
+	{
+	    surf->image_name = (char *)xmlGetProp(cur,(xmlChar *)"name");
+
+	    outfile = fopen(surf->image_name,"wb");
+	    if(NULL == outfile)
+	    {
+		printf("error open file\n");
+	    }
+
+	    cont = (char *)xmlNodeGetContent(cur);
+	    decode(cont, outfile);
+	    fclose(outfile);
+            // unlink(surf->image_name);
+	}
+    }
+    return(data[0]);
+}  
+  
+
+static SURFACE *create_surface_data(xmlNodePtr cur)
+{
+    char *name;
+    char *parent_name;
+    SURFACE *surface;
+
+
+    surface = (SURFACE *)malloc(sizeof(SURFACE));
+    if (surface == NULL)
+    {
+	fprintf(stderr,"malloc failed at create_surface_data");
+	return(NULL);
+    }
+    surface->size = atoi((char *)xmlGetProp(cur,(xmlChar *)"size"));
+    name = (char *)xmlGetProp(cur,(xmlChar *)"name");
+    parent_name = (char *)xmlGetProp(cur,(xmlChar *)"parent");
+    surface->name = name;
+    surface->parent_name = parent_name;
+    surface->next = NULL;
+
+    surface->data[0] = get_surface_data(surface,cur->children);
+    surface->data[1] = get_surface_data(surface,cur->children)+surface->size;
+    surface->data[2] = get_surface_data(surface,cur->children)+surface->size*2;
+    surface->data[3] = get_surface_data(surface,cur->children)+surface->size*3;
+
+
+    return(surface);
+}
+
+
+
+static SURFACE *get_node_point(SURFACE *surfaces, char *name)
+{
+    SURFACE *list = surfaces;
+    SURFACE *node = NULL;
+    while(list != NULL)
+    {
+	if(!xmlStrcmp((xmlChar *)list->name,(xmlChar *)name))
+	{
+	    node = list;
+	}
+	list = list->next;
+    }
+    return node;
+}
+
+
+static SURFACE *create_tree(SURFACE *surfaces)
+{
+    SURFACE *linear_list;
+    SURFACE *list_top = NULL;
+    SURFACE *parent;
+
+    linear_list = surfaces;
+  
+    while(linear_list != NULL)
+    {
+	if(xmlStrcmp((xmlChar *)linear_list->parent_name, (xmlChar *)"NULL"))
+	{
+	    parent = get_node_point(surfaces,linear_list->parent_name);
+	    if(parent->child == NULL)
+	    {
+		parent->child = linear_list;
+	    }
+	    else
+	    {
+		parent->child->brother = linear_list;
+	    }
+	    linear_list->parent = parent;
+	    __debug("name = %s, parent name = %s\n",linear_list->name, linear_list->parent_name);
+	    __debug("  parent = %s\n",linear_list->parent->name);
+	    __debug("  parent->child = %s\n",linear_list->parent->child->name);
+
+	    linear_list->child = NULL;
+	    linear_list->brother = NULL;
+	    linear_list = linear_list->next;
+	}
+	else
+	{
+	    list_top = linear_list;
+	    list_top->parent = NULL;
+	    list_top->brother = NULL;
+	    list_top->child = NULL;
+	    linear_list = linear_list->next;
+	    //printf("top name = %s\n",list_top->name);
+	}
+    }
+
+    return list_top;
+}
+
+
+static OBJECT *create_object(xmlDocPtr doc)
+{
+    char *align,*head;
+    OBJECT *obj;
+    SURFACE *tmp,**joint;
+    xmlNodePtr cur;
+
+    cur = xmlDocGetRootElement(doc);
+    if (cur == NULL)
+    {
+	fprintf(stderr,"XML file is empty\n");
+	return(NULL);
+    }
+
+    if (xmlStrcmp(cur->name,(xmlChar*)"OBJECT-3D"))
+    {
+	fprintf(stderr,"This data format isn't OBJECT-3D\n");
+	return(NULL);
+    }
+
+    if (malloc_align16(&head,&align,sizeof(OBJECT)) < 0)
+    {
+	fprintf(stderr,"malloc failed at create_object : OBJECT\n");
+	return(NULL);
+    }
+
+    obj = (OBJECT *)align;
+    obj->free_me = head;
+    init_object(obj);
+
+    obj->surfaces = NULL;    
+    joint = &(obj->surfaces);
+
+    for (cur=cur->children; cur; cur=cur->next)
+    {
+	if (!xmlStrcmp(cur->name,(xmlChar*)"surface"))
+	{
+	    tmp = create_surface_data(cur);
+	    if (tmp == NULL)
+	    {
+		printf("temp is NULL\n");
+		free_object(obj);
+		return(NULL);
+	    }
+	    *joint = tmp;
+	    joint = &(tmp->next);
+	}
+    }
+
+    obj->surfaces = create_tree(obj->surfaces);
+
+    return(obj);
+}
+
+
+//static int read_xml_3d_file(const char *file_name)
+OBJECT *read_xml_3d_file(const char *file_name)
+{
+    xmlDocPtr doc;
+    OBJECT *ptr;
+
+    doc = xmlParseFile(file_name);
+    if(doc == NULL)
+    {
+	printf("It seems that %s is not a xml data.\n", file_name);
+    }
+  
+    ptr = create_object(doc);
+    if(ptr == NULL)
+    {
+	printf("XML create_object failed : %s\n",file_name);
+    }
+
+    xmlFreeDoc(doc);
+    return(ptr);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml.h	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,1 @@
+OBJECT *read_xml_3d_file(const char *file_name);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/boss.xml	Tue Dec 07 15:39:45 2010 +0900
@@ -0,0 +1,45162 @@
+<?xml version="1.0"?>
+<OBJECT-3D>
+	<surface name="blackhole" size="6" prim="Triangle" parent="NULL">
+		<coordinate>
+			8.595253, 83.128859, 0.000000
+			-7.404744, 83.128862, 0.000000
+			-7.404748, 67.128861, 0.000000
+			-7.404748, 67.128861, 0.000000
+			8.595253, 67.128860, 0.000000
+			8.595253, 83.128859, 0.000000
+		</coordinate>
+		<normal>
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+		</normal>
+		<model>
+			0.595254, 75.128860, 0.000000
+		</model>
+		<texture>
+			1.000000, 1.000000
+			0.000000, 1.000000
+			0.000000, 0.000000
+			0.000000, 0.000000
+			1.000000, 0.000000
+			1.000000, 1.000000
+		</texture>
+		<image name="blackhole.bmp">
+			Qk04wAAAAAAAADYAAAAoAAAAgAAAAIAAAAABABgAAAAAAALAAADDDgAAww4AAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAwAAGAAAKAAAJgAAIAAAIAAAHQAAHAAAGQAAFAAAFAAABAAAAQAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAQAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+			FQAANAAANwAAKQAAJgAAJwAAJwAAJgAAJwAAJgAAIQAAHgAAGQAABAAAAQAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAACAAACQAABQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAEAAAKQAARAAAPgAA
+			NwAAMwAALgAAKgAAKgAAJgAAJAAAJwAAJwAAJAAACwAABgAAAgAAAQAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAABAAAFQAAFQAAEgAADgAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAgAAAQAAAQAAAQAAAQAAGAAAHgAAJAAAKAAA
+			LQAANAAAOAAAPgAAQgAARgAAAAAAAAAAAAAAAAAAAAAABAAAEQAAMgAAVQAAUgAARQAAOQAAMwAA
+			MQAALgAAKwAALAAALwAAMwAANAAAJgAAGQAACQAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAHgAA
+			HAAAGwAAGwAAFwAAEgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAgAABAAABAAAAQAAAAAAAAAAAAAAAQAAAwAABQAAIwAA
+			IwAAIQAAIQAAIwAAJQAAJQAAJQAAJAAAJwAAKwAAMQAAPgAARgAASwAATwAAVQAAWAAAXAAAWwAA
+			WQAAXAAAXgAAXQAAXQAAAQAAAQAAAQAABQAAHwAAbgEBbQEBXQEBSwEBQQAAPgAAOQAAOAAANwAA
+			NwAAOAAAQAAARQAAPwAAHwAABwAAAAAAAAAAAAAAAAAAAAAAAQAACwAAIgAAJAAAKQAAKgAAIwAA
+			HQAABwAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAgAABAAABgAACQAA
+			DAAAEQAAGgAAJAAALQAALwAAOgAAOgAAOQAAOgAAPAAAQAAARQAARwAARgAARAAARAAARQAARAAA
+			RgAARwAARwAASAAATAAAVQAAXwAAZQAAaQEBcgEBfQEBfgEBfwEBfwEBhQEBhAAAiAEBgwEBeQAA
+			cAAAagAAFgAAFQAAGQAAMgAAfgEBgQEBcwEBWAEBUAEBTAEBSQAARQAARAAAQQAAQgAARQAAUgAA
+			XAAARQAAIQAAFAAADQAACAAABAAAAQAABQAAIwAAMAAAMAAANQAAMwAAMAAALgAAKgAACwAABgAA
+			BgAABQAAAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABgAADgAAGAAAJAAAMwAAPgAASAAAUgAAVgAAWwAA
+			YAAAYgAAYgEBYQEBYwEBYwEBagEBbwEBawEBagEBZgEBYQAAYwAAYQAAYgAAYwAAYwAAZgEBZQEB
+			bQEBdwEBegAAfQAAiQAAkQEBggEBgQAAgwAAhAAAjwEBmwEBoAEBpgEBogEBlAEBgwAAdgAAcgAA
+			cQAAdwAAjQEBkgEBgQEBZQEBXQEBWgAAWgEBWAAAUwAATgAATwAAVgAAaQEBdQEBbQEBXwEBPQEB
+			HwAADgAAAwAAAwAAIAAAOwAAPQAAOgAAOgAAOAAAOQAAOgAAOgAAIwAAFgAAEQAACgAAAwAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAABAAAEgAAJwAAOgAARwAAUgAAWwAAYgAAaQEBawEBbwEBeAEBgQEBgAEBfwEBfwEBgQEB
+			fgEBgQEBhgEBhQEBgwEBegAAaQAAaQAAbQAAcAAAdgAAeAAAdwAAbQAAbQAAdwAAgwAAkAAApgEB
+			pwEBmAEBqAEBrgEBpwEBnQEBlAAAlgEBqwEBtQEBtAEBsAEBnwEBjAAAfgAAegAAgQAAkAEBlgEB
+			iAEBeAEBbAEBaAAAaQAAbQAAbAAAYQAAXwAAYQAAcwEBgQEBiAEBhwEBaQEBNgAACwAAAQAAFQAA
+			RgAATAAASQAARwAAQwAAQwAAQwAAQgAASwAAQgAAKwAAFwAACAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABAAADgAAJAAAPgAARwAA
+			VAAAYgAAawEBdAEBfgEBhgEBhQEBiQEBkAEBlgEBmAEBlwEBlwEBlQEBlAEBkwAAkAAAkgAAlAAA
+			kgEBjgEBjQEBigEBhAEBhgEBkQEBlwEBmwEBlAEBjQEBiQEBkQAApAEBrgEBsAAAtgAAswAAuQEB
+			vgEBuQEBpQEBnAAAtgEBvwEBwAEBvgEBtwEBmwAAiAAAgQAAhAAAigAAlQAAiwEBigEBdgEBbgAA
+			dQAAdwAAfwAAcgAAbAAAagAAcwAAhgEBkwEBmQEBjAEBSgEBEAAADgAASAAAWgEBWwAAVQAAVAAA
+			VAEBUQEBTgEBTgAAWwAAUwAAMQAAEwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAwAACQAAFgAAKQAAOAAASAAAUwAAYgAAbwEBewEBgQEBiQEBjQEB
+			lAEBngEBpQEBoAEBnQEBmQEBlwEBnQAAnQEBowEBqwEBpgEBngEBqgEBpgEBqAEBpgEBngAAlAAA
+			iwAAhwAAhwAAiAAAiQAAjgAAlAAAkQAAjwAAmAAAqwEBtgEBtwEBsQEBtwEBwgEBwAEBqQEBpAEB
+			vgEBxgEBxgEBxQEBwgEBtAEBqAAAoQAAlQAAmwAApQAAmAEBlgEBgwEBfAEBewAAegAAigAAggAA
+			eQAAdAAAcgAAfAAAmwEBqAEBoQEBbAEBHAAAPwAAYQAAbAEBYwAAYgAAZAAAaQEBWwAAVgEBXAEB
+			aAEBXgAALAAAEQAACgAABQAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+			AwAADwAAJAAANQAAQwAAUgAAXQAAawEBdwEBgQEBfgEBdgAAfAAAiAEBiQAAjAAAlgEBmwEBnQEB
+			ngEBoAEBnwAAnQAAngAApgEBqAEBogAAmwAAnAAAsQEBsAEBqAAAnQAAnAAAogAAngEBmwEBlgAA
+			kwAAmAAAmAAAkwAAkwAAjQAAiwAAjwAAlQEBnAEBsAEBwgEBwwEBsAEBsgEBxQEBygEBywEBygEB
+			ygEBtgEBsAEBsAEBrwEBugEBrwEBmQEBmgEBjAAAfgAAgAAAjQAAngEBkAAAiwAAiQAAhgAApQEB
+			tAEBtQEBsgEBkQEBSAAAaAAAeAEBfAAAbgAAbgAAgAEBcQEBXgAAXQEBZAEBdQEBYQEBMAAAGgAA
+			DwAABgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAADQAAHAAAKgAAOgAASwAAWwAA
+			ZQEBYwAAZAAAbQAAcgAAbwAAbQAAcQAAdQAAfQAAgwAAiQAAjAAAjwAAlwEBqgEBuAEBrwEBngEB
+			oAEBqAEBqgEBqQEBqgEBsgEBugEBtAEBsAEBsgEBsAAAqgAAqgAApgAAowEBmQAAnAAAoQAAqQAA
+			pwAAmQAAjQAAiQAAigAAiwAAnQAAwAEBxwEBvQEBuQEByAEBywEBygEBygEBvAAAvgEBvQEBuAEB
+			ugEBwQEBuAEBpQEBqAEBlAAAiAAAiwAAoQEBqAEBngEBmwAArgEBvwEBvgEBvgEBvgEBvQEBrgEB
+			gQAAgwAAnQEBhwAAgwAAjAEBjQEBbgEBZAAAZAAAbQEBdQEBZgEBOQAAHQAACwAAAQAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAgAAEAAAIAAALwAAQQAAUgAAYgAAbwEBcQEBYgAAbgAAdQAAgAAA
+			gAAAewAAegAAewAAewAAfAAAfQAAgQAAhQAAhgAAhgAAlAAApQAArwEBrQEBogAAnAAAoQEBpAEB
+			pAEBowEBpgEBqgEBsAEBtgEBuAEBrwAAqwAAqgAAsAAArwEBnAAAmgAAqQEBuQEBuQAAoAAAjwAA
+			hwAAhgAAjgAAqwAAuwEBtQAAuwEByAEBzQEBwgEBtQAAsgAAvgEBvgEBuQEBwwEBxwEBvwEBqgEB
+			qQEBmwEBjgAAlAAAqwEBsgEBpgEBowEBvQEBvwEBwAEBwgEBtQEBswEBvQEBrQEBsQEBmgAAkAAA
+			oQEBkwEBgwAAbwEBaQAAZQAAaQEBcgEBZgEBMQAAEwAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAABwAAIAAAMgAAPgAATAAAXQAAaAEBbgEBcQEBdgEBewEBhQEBlAEBjQEBgQAAgwAAhwAAhwAA
+			gwAAggAAgAAAgAAAgQAAgQAAggAAhQAAhgAAkAAAogEBqAEBqAEBpQEBnAAAnQAAowEBqgEBqwEB
+			qQEBqAEBrAEBswEBtQEBrQAArwAAtgEBqAEBlwAAlwAAqQAAwAEBuQEBoAAAjgAAhgAAjAAAmQAA
+			sAAAtwAAtAAAtQEBvgEBwwEBvAEBsgEBuQEBvgEBwAEBxwEBywEBxgEBqwEBqQEBowEBmAAAngAA
+			rgAAsQEBqQEBpgEBoAAAoQAAqAEBpAEBnwAAtgEBwwEBwgEBqgAAlgAArgEBnAEBlQAAgAEBcwEB
+			bAAAZwAAYAAAbgEBQwAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAFgAAMwAAQwAATAAA
+			VQEBXAAAZAAAaQAAcQAAcwAAeAAAfgAAhAAAhQAAggAAhAAAiAAAkgAAlwAAmAAAlAAAjgAAiQAA
+			hgAAhQAAhAAAgwAAhQAAigAAjAAAjgAAlQAAnwEBowEBpAEBoAAAmQAAoAAArQEBtAEBrgEBpQEB
+			oQAApQEBsQAAvAEBtQEBnwAAkQAAkwAApAAAsgAAqgEBoAAAkwAAjgAAlQAArAAAtQAAsgAAqwAA
+			uQAAvwAAugEBnQAAsAAAwQEBygEBzAEB0AEBwwEBqQEBrQEBrgEBkgAApAEBpgAAqwEBvwEBxAEB
+			vAEBqwEBoQEBpgEBowAAvQEByQEBwgEBoQAAsQEBpwEBnwAAkQEBfwEBeAEBbQAAZgAAYwAAaAAA
+			GgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAACwAAJQAAKgAAHQAAFgAAQAAAfgEBjQEBlQEB
+			nAEBpgEBrAEBpwEBowEBoAEBlwAAkwAAoAEBpgEBpQEBrAEBtQEBuwEBuwEBtAEBnwAAlgAAmwAA
+			nQAAmwEBlAAAiQAAiQAAiAAAiwAAlgEBpAEBpgEBnQAAnAAApAEBsQEBqwEBnwAAmgAAsAEBvwEB
+			vwEBsQAAnQAAkQAAkwAAoQAAogAAqAAAmgAAlgAAlwAAqAAAtwAAsQAApAAAtAEBvgAArwAAoQAA
+			tgEBvwAAxwAA0QEBzwEBuwEBnAAAqgAAsAEBrAEBtgEBqgAAxwEBzwEBzgEByQEBtwEBmwAAmgEB
+			ogAAwQEBzQEBvwAAswEBsAAAqAAAowEBiQEBfwAAeAEBbAAAZwAAagAANgEBAgAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAQAABQAABAAAAQAAAgAACAAAHgAANgAAVwAAeQEBnAEBsgEBwQEBxAEB
+			xwEBxAEBwQEByQEBywEBxwEBvAEBrwEBrAEBtAEBvAEBvwEBuAEBqgEBngAAowEBqAEBmAAAiwAA
+			hwAAhQAAgwAAhAAAjgAAmAAAkwAAiwAAjgAApQEBrgEBoAAAmQAApQAArwAAugEBvAEBogAAmAAA
+			lgAAoAAAnwAAnQAAlQAAlwAAnwAArgAAugAAsQAApgAAswEBvwAArwAAqAAAtAEBtQAAxQEB0gEB
+			ygEBsQEBmgAApgAArwEBuwEBuQEBswEBzQEBzwEBzgEBzwEBvQEBngEBmQAAqAEBxgEBzgEBwwEB
+			tgEBswAAswAAkAEBiwEBhQEBdQAAbQAAZgAAcgEBFwAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAACQAAGQAAMAAAVwAAgAEBrAEBwQEBxgEBygEBzwEB
+			0AEB0AEBzAEBxgEBvQEBtQEBtAEBuwEBxQEBuwEBmwEBjwAAlgAAnQAAogAAogEBmQEBlQEBkgAA
+			kgAAjgAAjQAAiQAAiQAAmwAAuAEBtQEBpgAAoQAAqgAAswAAswAArAAAogAAngAAnAAAmQAAkwAA
+			jwAAkwAAnAAAqAAAtgAArgAAnwAAswEBwAAAtQAApwEBrwAAtgAAywEBzgEBwQEBpQEBmAAAmQAA
+			uQEBxQEBsAEBugEBzwEBzgEBzwEBzwEBvgEBpgEBngAAtAEBzAEBzQEBvgAAuAAAwAAAnAAAjwEB
+			hgAAgQEBcwAAbAAAagAAUQEBFgAACQAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAABAAAFgAALwAAVgAAtwEBwAEBwAEBwgEBxQEBwAEBtwAAtQAAwwAAyQEBzAEBzAEB
+			ywEBywEBywEBywEBvAEBnwAApQEBtgEBrAEBtAEBwgEBwAEBsAEBtAEBtAEBqgEBngEBmwEBmQAA
+			lwAAowAAtgEBvwEBrwAApQAAowAAogAApAAAqwAAsAEBsQAApAAAmwAAlQAAjgAAigAAjAAAmgAA
+			rgAAsgEBnwAAtgEBwQAAuQEBrQEBsgAAuwAAzQEByAEBtQEBmwAAkwAAmQAAwQEBwgEBqgEBvgEB
+			0AEByQEBxQEBxQEBvwEBpwEBoAAAtwEBxQEBvAEBuAAAywEBqQAAlAAAiwAAhwEBfAAAcgAAawAA
+			cAAAOQAAFAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAADgAAJgAAVwAAngEB
+			qAEBvgEBwAAAyAEBxwEBvwEBtgAAqAAAngAAmQAAnAAAowAAsgAAwwEBzAEBzgEBzgEByAEBrAEB
+			twEByQEByQEBwAEBpgAAoAAAtwEBwAEBsQEBrwEBuAEBswEBpwAAmwAAqAEBqQEBnAEBogEBnwEB
+			lAAAkAAAlQAAmgAAlAAAlAAAnAAApgAAnwAAnAAAmAAAjgAAjAAAjAAAmAAAtwEBuwEBqgEBrwEB
+			vAEBvgEBpQAArgAAvAEBygEBuwEBrwEBmQAAkAAAqAAAxAEBvwEBngAAsQEBxAEBtwAAugEBwQEB
+			wQEBqwEBngAAtwEBswEBtgAAywEBsQAAmwEBkwEBgwAAjAEBeQAAcQAAawAAdAAAKAAADAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAKgAAeQEBsgEBxQEBygEBywEByQEBxQEBvgAAugAA
+			rAAApgAAqgAAuAEBuAEBuQEBuQEBswEBuwEBuQEBvQEBvQEBtAEBsAEBwAEByAEBwgEByAEBxQEB
+			oQAAnQAAsgEBwAEBtQEBsgEBsQEBqgEBqQEBlAEBlQEBjwAAhwAAhQAAhwAAigAAjAAAjQAAiwAA
+			igAAiwAAjAAAkwAAlAAAkwAAlwAAiwAAkAEBjQAAmAAAvgEBxwEBrAEBpQEBvgAAvwEBpgAApgEB
+			vwEBwgEBsgEBpQAAmQAAmwAAsQAAxwEBuAEBkAAAmQAApAAArAAAtAEBxgEBwAEBrQEBpgEBogEB
+			rQEBvgEBoQAAoAAAnwEBhgAAlAEBhwAAdwAAbwAAbQAAbgAAHAAABgAAAgAAAQAAAQAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAACgAASgAApgEBxwEBzgEBzgEBzQEBxwEBxwEBwQAAswAAqgAAqgAArgAArwEBsQEBrgAA
+			rAAArAAArAAApgAAsQAAuAEBvwEBuwEBtQEBrQAAowAAnQAAtAEBvgEBuwEBrwEBsgEBvgEBwwEB
+			uwEBrwEBmAEBkAAAiwAAhwAAigAAjgAAkQAAmQEBnAAAnAEBmQIClQMDkQQEjwQEkAMDlAICjQEB
+			iwEBkgEBlAAAjgAAkwEBjAAAmwAArgEBoAEBkgAAmwEBtQEBuAEBnQAArAEBxQEBpwAArAAAogAA
+			oAAAnwAAwQEBywEBsAEBmQAApAAAsgAAtQEBsgAArQAAuwEBqQEBpAEBoQAAtAAAmwAAnAAAnwEB
+			jAAAlQAAnQEBgAAAcwAAbgAAcwAAPAAAGQAADwAACAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAWwAAuwEBywEB
+			zQEBzgEBygEBuAAArQAAtQAApwAAnQAArAEBswAAswAAuwAAwwEBuwEBtgAAuwEBwQEBvAEBuQEB
+			vwEBvwEBuwAAvQAAvwEBtAAAowAAoQAAqwAApgAAswEBtgEBuAEBuwEBsgEBnwAAjAAAhAAAhwAA
+			mQEBrQEBtgEBuQEBwwMDyQUFyQQEyQICwwQEtwsLtBMTrRISnggIjgICiwIChgEBiQAAkQAAjgAA
+			mgEBkgAAlQAApAEBlwAAlAAAlQAAtAEBtAEBmwAAtwEBtQEBnAAAqwAArgEBnAAAsAAAzAEBwgEB
+			qgAAmwAAngAAqgAAtwAAsgAAwgEBsgEBpwEBoAEBqQAAngAAmQAAlgAAmwAAlwAAqgEBjQAAeAAA
+			cQAAcQAAfwAAOQAAIgAAEgAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAZQEBvgEByAEBywEBywEBwgEBrQAAogAApAEB
+			nAAApgAAvAEBzAEBygEBvAEBuAEBsAAAqQAApQAApwAAqQAAqwAAsAEBvAEByAEBzwEBzQEByQEB
+			wQEBtAAAqgAAoQAAnAAAqgAApAEBpAEBmgAAlAAAlQAAjgAAnAAAmgAAlgAAqQAAvwICxgICwgEB
+			vgEBxAMDxwQEzQQEzgQEwgoKuxQUvhYWtgwMoQICjAEBhAAAhwAAiwAAjwAAoAEBkAAAnAAAoQAA
+			nAAAlgAAkwAArwEBqQAApAEBtQEBmQAApQAAsgEBpwEBoQAAxQEBxgEBtQAAqQAAnAAAogAAtQAA
+			xAEBygEBswEBpwEBogEBnAAApAEBkgAAlAAAqQEBmgAApwEBnQEBgQAAdQAAbwAAhgEBYAAANgAA
+			HgAACwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAACwAAYAEBuwEBxQEBxQEBwwEBsgAAmwAAnAAAnAEBqQEBvAEByAEB0AEByAEBtQEB
+			ogAAmwAAmgAAmwAAnQAAoAAAqQAAsgAAtQAAuQAAvgAAxwEBywEBzgEBzwEBzQEBxwEBvQEBswEB
+			ogAAkAAAiQAAkwAAnAEBmQAArgEBwwEBwwEBrgAAnAAApAEBtwEBwgICwgICuAMDvAQEwwQEywUF
+			zwYGzQkJyg8Pxg0NxwUFuAMDmAEBgwAAhAAAhwAAkQAApAAAlQAAnAAAmgAAoQEBmQAAlQAAqQAA
+			sAAApwEBqQEBqAICsgICtgEBmAAAsgEBxQEBsAAAtAEBrQAArwAAvgEBxwEBzgEBuAEBowEBtQEB
+			mgAAoQEBkQAAkgAAqwEBmAAAqAEBoQEBiAAAfwEBdQAAkAEBiwAATQAAKgAAEAAAAQAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAYgEBtwEB
+			vwEBvQEBuwEBqgAAmQAAoQAAoAAAtwEBywEBzQEBzQEBwQEBqwEBngAAlQAAjgAAlQAAnQAAogAA
+			owAAqAAAsAAArwAArwAAsQAArwAArwAAswAAvAAAwQEBxgEBxAEBsAEBmgAAngAAqAEBpAEBkwAA
+			pAEBsQEBsgEBrgEBqAAAnAAAlwAAmQEBoAMDpAICrgQEsgcHuAgIwQUFywUF0QsL2hwc3xwc2g8P
+			0AQExAICoQIChwAAhQAAhgAAkQAAnwAAlgAAnAAAmwAArQEBmQAAmgAArAAAwAEBuAMDuQYGvQcH
+			wQMDoAEBoQEBvwEBtAEBoQAAsAAAtwAAxgEBxQEB0AEBwgEBqgEBuQAAnAEBmQAAkgAAkgAAowEB
+			mQAAsAEBnAEBjAAAhAEBgwEBogEBogAAZAAANAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAbwEBsQEBtQEBqgEBqAEBnQAAlQAAnwAA
+			oAAAsAEByAEByAEBvgEBsgEBnwEBlgAAnwEBrQEBsAEBsAEBpwAAoQAAogAArQAAswEBsQAArAAA
+			qAAApgAApAAAnwAApAAArgAArAEBnwAAmQAAqgEBugEBswEBnAEBlwEBmAAAkwAAkAAAkwAAmwAA
+			oQAAoAAAmQEBmQICmgIClQEBkwEBmwQEqAcHvAcHxAYGzQkJ4Rsb7B4e3QsL1AMDygMDqwMDiAAA
+			hgAAgwAAkgEBmgAAlwAAmAEBnwAAswEBmgAAnAAAuQAAxQMDyQsLzgwMxwYGsgICngAAuwEBugEB
+			ngAAogAAwAEByQEByAEBzgEBxQEBtgEBvQEBoAAAoQEBlgAAkgEBnQEBngAAtwEBoAEBjgEBgwEB
+			hwEBrAEBqgEBbwAAOgAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAQAAFgAAdQEBrQEBrAEBngEBmgAAlgAAlAAAoAAAoQEBpwEBrAEBqAEBnwAAmQAA
+			lwEBnAEBpwEBsAEBrgEBnwAAmwAAnQAAoAAAowAAoQAApQAAsQEBuAEBsQEBsQEBtAEBswEBsAEB
+			pQAAmAAAnAAAsgEBsgEBngAAjAAAiwAAmgAApQEBqgEBsAEBtQEBtwEBvwAAxAEBsgEBngAAlQEB
+			mQICnAICnAEBlQEBlwMDrAYGwAQEygYG2hQU8B4e3QkJ1AICzgQEqwICiQAAhAAAhgAAkAAAjwAA
+			lgAAlwAAqwEBrQAAkAAArAEBxQICzQkJ2w8PzwkJwQMDlgAArAEBvQEBowAAnAAAuQAAygEBywEB
+			ywAAvgEBvwEBxwEBrwAArQEBnAEBkQEBmgEBowAAvAEBoAEBkQEBggEBiAEBtAEBrgEBcQAAZAAA
+			FgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAFgAAcQEB
+			pgEBowEBlAAAlAAAlwAAkwAAnAEBjwAAjwAAjwAAkQAAkwAAkgAAkgAAlwAAmgAAlQAAjgAAigAA
+			igAAjgAAlgAArAAAvAEBxQEBxwEBwwEBwwEBxwEByAEBxQEBvwEBpwAAmQAAoQAAqAEBnQAAnAAA
+			oAAAmwAAlAAAmwAArgEBtQEBuwEBvwEBvwEBwgEBrwEBlwAAmQAAlwAAjAAAiwAAkgAAnAAAmgEB
+			lwMDpQYGwQUFygQE0hAQ5xYW2AYG1AICzgMDrAICiwAAhgAAiQAAjgAAlQAAkwAAlwAAtAEBmgAA
+			pAICxAMDvwMD2Q0N2A0NyQYGoQEBnwAAuwEBswEBnwAAtAEBxQAAzAEBygEBtgEBxAEBzQEBwAAA
+			sAEBqQEBkgEBmwAApwAAvQEBpwEBkQAAhAEBjgEBuAEBsQEBawAAbQAAZgAAGwAABgAAAwAAAgAA
+			AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAEAAAagEBoAEBnwEBjQAAlwAAnQEBjAAA
+			jQAAiwAAkgAAoQEBqgEBqQEBoAEBmAEBlAAAkgAAkwAAkQAAmAAAowAAogAAoAAAoAAAsgAAvwEB
+			vwEBwAEBvwEBvQEBuQEBugEBwgEBrQEBmwAAoAEBogAAqAAAsAAAuAAAuQEBuAEBrAAAmAAAkAAA
+			jwAAlAAAnwAAqAEBqwEBmwAAjAAAjgAAjwAAjQAAiQAAiAAAjAAAjwAAlAAAkgICpQQEuAMDqwIC
+			wQoK4A4O2AQE1QICzAEBqAEBjQAAhAAAjAAAlwAAmAAAjwAAoAAAqgEBmAEBxQUFxwICxAUF2Q4O
+			0QkJtAQElwEBtwICvAICrgEBtgEBwAAAzQEBygEBsgEBwgEByQAAyQEBsQEBqQEBkgEBkwAApgAA
+			ugEBsQEBkwAAhgAAmQEBuwEBtAEBXgAAiQAAhwEBbgEBLAAAEgAACgAABgAAAwAAAQAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAADQAAZAEBnQEBnQEBjQAAlgAAoQEBlAAAjwAAkAAAmQEBmgEBlgAAlAAA
+			kAEBigAAiAAAhgAAhQAAhQAAlAAApwAAtQAAvAAAwgAAwQAAwAAAwQEBvgEBvAAAwAAAxAEBxwEB
+			zAEBxgEBrQAAogAAsQEBwQEBxgEBwwEBuAEBqgEBnAAAlQAAkwAAjwEBjAEBiAAAigAAigAAhgAA
+			iAAAkQEBoAEBpgEBowEBnwEBnAEBkAAAjgAAkQAAigAAjAEBnAICpgICnQEBuQUF2QUF1wIC1QEB
+			zAEBqAEBjwAAhAAAjQAAmAEBkwEBkAAAqgEBkQAAsQICzgICxQICzQkJ2w4OxgcHlwEBsQQEuwQE
+			rgICuwEBvwEByQEByQEBtQEBwwEBwQAAxgEBtgEBowEBjwEBjAAApAEBtwEBsgEBlAAAiAAAngEB
+			vwEBtAEBTAAAlgAAiQEBbgEBTQAALgAAFwAADQAABgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAACAAA
+			UgEBlQEBmQEBigAAjQAAmQEBkQEBiAAAigAAkAEBlAAAlQAAnAEBowEBowAAkwAAmgEBmgEBnAAA
+			oAAAowAAnAAAnAAApwAAsAAAtwAAvwAAygAAzgEByQEByQEBzgEBzgEBzAAAywEBwwEBuQEBswAA
+			rAAAnwEBlQAAkwAAkwAAlgAAnAAAogEBnwEBlgEBkAAAigEBhwAAiwAAkAAAjAAAjQAAlgAAngEB
+			ngEBnwEBpgEBqQEBnAAAlAAAjQAAjQAAmwEBnwAAmQAAuwEB1QEB1gEB1QEByAEBpgEBjwAAhwAA
+			jgEBnQICkAEBnwEBmgEBowEBxwICyQICvQQE2A0N1gwMpgMDqAQEugUFqgICtgEBxQEByAEBxAEB
+			ugEBxwAAvgAAtgAAtgEBngAAjgEBjAAAogAAsAEBqgEBlQAAjgAApQEBwQEBqgEBPgAAjwEBjQEB
+			aAEBRgAASQAAKwAAFgAACgAABAAAAQAAAAAAAAAAAAAAAgAABwAAPwEBjgEBlAEBhQAAiQAAjwEB
+			hwAAhwAAkAAAnAAApwEBqgEBrQEBswEBtgEBuQEBuAEBuQEBvAEBwQEBywEBzwEBygEBywAAvQAA
+			pAAAoQAArgAAywAA2AEB1gEB1AEB1QEB0gECywEBwwAAtQAApAAAlQEBjQAAjgAAlAAAnwAAtQEB
+			vwAAxAAAxQAAxQEBwwEBugEBpQEBmwAAmQEBlgAAkwAAkwEBkQEBkwAAjwAAigAAjgABoAEBsAEB
+			sAEBoAAAjwAAiwAAkAEBlwAAmwAAwQEB0AEB0wEB0QEBwwEBpgEBjwAAhgAAkQEBmQICkwEBnwMD
+			nQICxgMDyAEBuwICxwgI3g8PtwUFnwICuQcHrQICsQAAwgEByQEBwwEBxQEBzQAAwAAArQAApgAA
+			mQAAkQEBigAAoQAAqgAAlwAAnAAAkwEBrQEBxAEBowEBQQAAmwEBhwEBWwAAQgEBSwAAOgAAIgAA
+			DwAABgAAAgAAAAAAAAAAAgAACQAAKgAAgwEBmQEBhQAAhgAAkAEBlwAAjgAArQEBwQEByAEBygEB
+			xQEBvwEBugEBtwEBsQEBrQEBrwEBswEBugEBwQEBxwEBzwEB0wEBuwAAogAAqgAAxgAA3wAA2wEB
+			2QEB2gEB0wEBuAEBpAAAmgEBkwABjwABkQEBkwAAlQAAnwEBrAEBtwEBvQEBwgEBxwEBywAAywAA
+			xwAAxAEBxQICugICpwICkwAAjwAAlgEBowICpAICkwEBiAAAiQAAkgEBpgEBtAECqAEBjwAAiAAA
+			iwAAjwAApgABwAEBxQEBywEBywEBwgEBngEBiQAAiQAAkwICkgICmgMDmgICxAQEzQMDuAMDtQMD
+			0w0NxAcHmgICswYGqAMDrwAAwgEBxAEBygEBzgEB0AEBwQAArwEBlgAAmwAAkwAAjQAApAAAqAAA
+			mwAApQEBpgEBtAEBxAEBkwEBWAEBpQEBggEBVgAARQAATAAAQAAALgAAGAAACQAABAAAAgAAAQAA
+			BQAAHQAAZwEBlwEBowEBoAEBrgEBsAEBtAEBvQEBzAEB0AEB0AEB0QEB0QEB0QEB0AEBzQEBygEB
+			xQEBwwEBwwEBxAEBxQEByQEB0gAAwgEBsQAArQAAwAAA3QEB2AEB1AEByQEBtgAAswAAlwAAjAAA
+			iwAAjQAAigAAigAAkQAAlwAAnAAAoQAApwEBrQEBsAEBtQEBugEBvwEBxgMDxAMEwgQExQMDyQIC
+			vwICqgICmAICjwAAmAAAqAEBpAEBlAEAjgEBnAEBqgEBrAEBpgEBkgAAiQAAiAAAkAABpgEBrwAB
+			vAACxgEByQEBtgEBlQAAiQAAiAAAkAEBkAEBlAEBwgcHzwMDvwQErgMDugQExwgIngEBqwUFoAMD
+			sAAAxAEBvAAAywEB0AEB0AEByQEBswEBjQAAmAEBlQAAlwAApgAApwAAoAAAqgAAsQEBuwEBxwEB
+			hwEBewEBqgEBfQEBVwAATQAAUAAAPQAANgAAIgAAEAAABwAAAwAAAQAACgAAPwEBjQEBogEBrwEB
+			twEBuwEBwgEByAEBywEBzgEB0AEBzwEBzwEBzwEBzwEBzwEBzgEBzQEBzgEBzQEBzgEBzgEBzgEB
+			0AEBygAApQAAsQAAwQAA0AAAzwEBxwAAtQAAqgAAtwAAvgEBsQEBqQEBngEBkwAAmAAAogEBrQEB
+			sQEBrgEBpgEBngEBmAEBlAEBlgEBnQEApwEBsAICsgMDtAUFsQcHswYGvAQExgMDugMDqwICmAAA
+			jgAAmAEBowEBlgAAlQEBoQIBuAECugEBqgEBlQEBiAEBiQAAjgAApgEBogECuAACxAABwgEBpQEB
+			iwAAiwAAigAAiwEBjwEBvgcH0AQExgUFswYGrwICvQUFqgEBowMDpQICvAEBxAEBtwAAzAEB0AEB
+			zwEBzwEBsAEBiQAAlQEBmgAApAAAqQAAqQAArQAArgAAugAAxAEBxwEBigAAmwEBrQEBeAEBVgAA
+			UwAAXQEBQAAAMQAAJwAAFgAADAAABQAAAwAAEAAAZQEBlgEBnwEBqwEBrgEBvQEBvgEBtgEBtAEB
+			vgEBxQEBuwEBtAEBsQEBugEBwAEBwAEByAEBygEBwwAAuAAAsgAAvAAAwwAAuQAAtQAAwQAAywAA
+			ywAAyAAByQEBuQEBwAEBxQEBtwECpwEBlQAAmAAArAEBuwICwwICvQICuAEBtQEBsgEBrgEBqgEB
+			pQEBnwEBnQEBmgEBlgAAlgEAnQEBpgICqgMDpwICpwMDswICuAICqwEBpgEBlwAAkgEBkgEAkAAA
+			nwEBnAEBsgEBwwEBtgEBlwEBjgAAiAAAlgAApAECoAECtwECwwECtQEBkgAAkgAAhwAAiAAAiwAA
+			sgUF1AYGyQUFswYGswMDwQICuQICnAEBqQAAxAEBwgEBtwAAzQEBzgEBygEBzQEBqQEBigAAkAAA
+			mwEBsQEBrgAArwAAtwAAnwAArwAAyAAAxQAAkQAArAEBrgEBdQAAVwAAWgEBZwEBTAAALgAAIwAA
+			GgAAEAAACAAAAgAADQAAWAEBawEBZgAAbgAAcAAAkwEBjwAAewAAWwAAXAAAZwAAOwAANQAAQwAA
+			VQAAcgEBvwAAywEByQEBsgEBlgEBlQAAogAAsQAAuAAAugAAwQAAyQEBxgAAyQEByAEBxgEBwAEB
+			qwEBlwEBjQAAlgABrQAAvwEBwwEBrQEBmwAAlgAAmgEAnAAAnQEBmgEBlwAAlgAAmQAAnQEBoQEB
+			owEBogAAmwAAkwAAngAAogEBoQAApAAAsgEBqwAAqAABowEBmAAAlgEBlQAAqQEBmwAAtgABwgEB
+			vgEBoAEAiwAAiAAApgEBmgEBoQECuQICwQICoAAAkgAAkQAAhgAAiQAApAIC0QYGzgUFswYGsgQE
+			swMDuQEBngEBpAAAwgEBwAEBuAAAywEBzQEBxQEBxwEBnAAAiwAAkAAAmwAAuwEBtQAApgAAqQAA
+			vAAAlgAAsAAAsAAAmAAAtAAArQEBcAAAVwAAZAEBaAAAWAAANAAAIQAAGwAAFAAACQAAAgAABAAA
+			GAAAJQAALgAANQAAOQAAQAAAQgAANAAAGgAABAAABgAAAAAAEAAAMgAAUQAAnwAAwwEByAEBwgEB
+			nAAAmgAAlQAAowAAvQAArwAAqAAAngAApwAApAAApQEBtQEBtgEBoQEBkgEBjAAAnQEBtwEBwAEB
+			tAEBqQAApAEAqAEBtAEBugICtQEBrAEBoAICmwEBmgEAlAAAjwAAjQAAlgAArAAAtwEBtAEBqwAA
+			pQEBogEBoAEBrQAAsgEBqwAAoQABpQEBnAAAngEBkgAAmgAAnAAArwEAxAEBvgEBnQEAhQAAlAEB
+			pwICkwEBoQEBvgICqwEBjAAAnAEBiAAAhwAAmwEBxwQE0AUFsgYGrAUFtQUFtwICrAEBogAAvQEB
+			wAEBvAAAywEBzgEBvwEBtwEBlwAAiwAAmAAAqAAAwgEBuwAApgAAoQAAsgAAuwAAqAAAjwAAgAAA
+			sgAArQEBcwEBZgAAbAAAZAAAWQAAOgAAJAAAGwAAFgAACwAAAgAAAQAABQAACQAADgAAEAAAEAAA
+			EQAAEQAADgAABgAAAAAAAAAABQAAJwAATQAAdAAAtgEBxgEBwwEBuwEBsgEBpwAApgAAuwAAqwAA
+			ngAAogEBmgAAkAAAmAAAoAEBmAAAmAICjQEBigAAlwAAtQEBswEBqQAAqAAArwEBwQICzQEBzQIC
+			ygEBxgIBwQIBugEBsQEBrgAAqgAAngEAjwAAiAAAigAAlwAAqAAAqwAAowAAngAArQAAvAEBvQAB
+			tAAAngAAkgAApAAAqAEBogEBkAAAhQAAjgAAtQEBwAAAtwEBlQEBigAArwEBmQEBiwECpgICtAIC
+			kQAAoQEBjwAAiAAAlgEBvgIC0gUFwQkJoAQEsgYGuAMDtwEBowEBugEBwgEBwQAAygEBzQEBwQEB
+			qAEBmAEBiwAAogEBqwAAxgEBvwAArQAAogAAowAAtQAAqQAAjQAAfAAAogAApgAAegAAeQAAbQAA
+			ZAAAXwEBPQAAJwAAHgAAGgAADwAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA
+			CgAAHAAAOwAAXwAArgAAyQEBxgEBuAEBuwEBsgEBtQEBwwEBqQAAmAAAowAAngAAkAAAnQAArgEB
+			sQEClwEBigEBiAAAkwEApgAAsgAAtgAAuwEBwwEBygECzQEBywIByQEBwgEBugIBtwIBvAEBvwEB
+			wAEBwQEBwwEBvQEBqwAAjwAAhwAAjgAAoAAAqwAApAAAnAAAnwAArwAAuAEBrQEBmgAAkQAAngAA
+			qwEBqAEBjQAAhgAAnAAAuwEBtgAAqQEBiAAAowEBsAEAkQECowEBuwICmAEBmAAAkwEBkAEBkQAA
+			uAAB0AQEzgkJpwUFpwQEugMDvgICpgEBuQEBxgEBxAAAyQEByQEBwQEBmgAAkwEBkgAAuAEBrwEB
+			xQEBxAEBtgAArAAApAAArwAArwAAlwAAiQAAmgAAngEBiAAAfAAAbQAAcAEBZAEBQgAAKQAAIQAA
+			HQAAEgAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFwAAKAAAOQAAUQAAowAAxgEB
+			ygEBvgEBrAEBtgEBtwEBxwEBrgEBmAAAnAAAowAAjwAAmAAApQEAtAEBngEBigEBigAAkgEBqQAA
+			vwEBvwEBvwEBwQEBwgICugEBtQECtAEBsAIBqgIBqQEBpwEBowAAoQAApwEArgEAtAAAuwAAwAEB
+			twEBowAAjgAAkAAAmgABqgAAtAEBpwAAoQAAoAAAqQAAtAEBrQEBmQAAlAAArQEBrQEBjAAAjAAA
+			pwEBrgAAqwAAjgAAlQAAtgEBnQEBswEBuAECnAEBmQEBrQECpQEBjgAAsQABzAMD0gYGuAYGnAIC
+			vAICwwICrgEBuQAAyAEBwwAAwQAAwwEBtQEBlQAAjAAAnwEBxAICugMDwwMDygMDvgICtAEBpgAA
+			qwAApwAApwAArAAAswEBnAAAjQAAgAAAdgAAgQEBZAEBRwAAKgAAIwAAIQAAFQAACAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAALwAASQAAlAAAmgAAvQEBywEBvwAAnwAAsQEBuwEBwwEB
+			sQEBmQAAngAApgAAlQAAmAAAogEAtgEBqQEBjQEBigAAlgAAoQAArgAAuQAAwQICuAICrgICpAEC
+			owECpwICqwICrAIBrAEBsgEBvAEAwwEAxwAAxwEBxQEBxQEBwwAAvgAAugAAugAArgEBmQAAngAA
+			sAABuQABugAAtwAAsQAAoAAAmgAApAABrQEBqAAAnwABtAEBpwEBjgEAmwAAsQEBowAAkwAAkQAA
+			pgEBqAEAtgEBsQICngAAmgEBuAICtgEBkAAArwAByQIC1AQEyAYFmwEBtwICxAAAtAEBuQAAzAEB
+			wAAAugAAvwEBqgEBlQAAiAAArgICzQICyAcHwQUFzgUFxAICuQICqwAAqAAAogAAswEBuAEBrgEB
+			jwAAjAAAlgAAgAAAigEBYgEBSgAALgAAKgAAJQAAGAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAABAAAJgAASQAAlAAAlwAArwAAywEBxAAAlwAApwEBvgEBxQEBsAEBlQAAoQAAqgAAlQAAmQAA
+			pgAAugEBtQEBlgEBkQEBpAEAtgAAwAEBvwAAuwEBtgMDsQMDsQICtQEBuAICwQICxgEBygEBzgEB
+			0AEBzgEByQEBxAEBwQEBvgEBvQEBugEBtAAAoAAAkAAAjwAAkQAAjgAAkwAAqQEBsAEBpgEBmwAA
+			kwAAjgAAigAAjQAAlwAAnQEBmQAAqwEBnwEBlAEAsQEBogAAlQAAlwAAlQAArQEBuAEAswECoAAA
+			nAEBsQECugIClAEBqQAAxgEB0AIBzAMCnwAArQAAxAAAwAAAvQAAyAAAuwAAsgAAvwEBogAAkwAA
+			igAAswMD0AICyAUFxQoK0ggIxwMDvQQEsgAAowAAoAAArQAAwwEBsgEBigAAnAAAngEBiQEBjAEB
+			ZAAASAAAMwAAMAAAKgAAGgAABQAAAAAAAAAAAAAAAAAAAgAABQAACQAADAAAHAAAPQAAlAAAlAAA
+			oQAAxQEBygEBpQAAowAAwAEBxwEBuwEBnAAAngAAsAAAmAAAlgAAqQEBugICuwMDoQICngEBtQEB
+			wwAAwQEBvAEBvAICvQMDtQMDqwICwAICyQEBzgEB0AEBzwEBzAEBxgEBwgEBvAEAswAArgAAowAA
+			lgAAkAEAjgAAkQAAjgAAigAAggAAggAAhAAAhAAAhAAAhAAAhAAAhgAAiAAAiQAAiQAAiQAAiAAA
+			igAAigAAjgAAngEBmwEBowEAqAEBlAAAoQAAjQAAoAABvAEAsAEAngAAnwABqgEBuwICngEBqwEB
+			wAEBxgEBwwEBpQEBpgAAxAAAvgAAwwAAvgAAwAAAsgAAvgEBmwAAkAAAjgAAsAQEzwQEzAMDtwYG
+			ywgIxwMDwQUFrwAAoAAApgAAtwAAwwEBqQEBkQAAsAAAmwEBkAEBiAEBZgEBSQAAOAAANgAALgAA
+			GwAAAwAAAAAAAAAAAAAAAAAABQAAEQAAHgAAKgAAOQAAlAAAlAAAmwAAvAAAxAAArAEBogAAwwEB
+			ygEBxAEBogEBjwAAoQEBnQAAkQAArQICuAICuQMDpwMDpQIDtgICsQICpwAApQAAqAAAtgMDsgMD
+			qAICvAICzAEB0AEBzQEBxwICvAIBsAIBpgEBpAEApgEArQAAsQEBrQAApQAAngEAoAAAmAAAjgAA
+			lQAAlQEAnAEBlQAAhgAAgQAAgQAAgQAAgQAAgQAAgQAAggAAggAAggAAggAAhQAAhQAAiAAAkAAA
+			kwEBowEBlAAAqQEAkgAAlAABwAEBrwEBnwEBqQEBpwEBugEBrwEBtgEBugEBtgEBugEBqAEBnwAA
+			wwAAvgAAxAAAuQAAvQAAswAAvAEBlgAAkAAAmQAAswUFzgcHzQICqAEBtwQEyAICvgYGpAAApAAA
+			tAAAuQAAvgEBlQAApgAAuAEBlgEBlAEBhAEBZwAATAAAPQAAPAAAMQAAFQAAAQAAAAAAAAAAAAAA
+			AAAACAAAHgAANQAASgAAlAAAlgAApAAAtAAAxAEBsQAAmgAAuQEByAEBxwEBqQEBjwAAkgAAlAAA
+			kAAAqwMDvAQEtgICowEBqAQDsgUFqwQEqQEBtQAAwAAAwwICuAICogAAswICxQECzAEBygEBxgEB
+			vgEBtQEBpgEAnQABkAAAkgAAmgAApAAAsgAAtQAAtQEAnwAAkQAAmAAAngAAmQEAiwAAggAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAhgAAiQAAjQAAjwAAqgEBmAEB
+			jQAAvQEBswEBtgABuAEBpwEBuwEBtAEBtQEBrwIBqAEBtAEBpgEBmwAAwAEBxAAAwwAAsQAAvAEB
+			tgEBtwEBlgAAlQAAnwEBsQQEyQkJzAICrQEBrwQEyAICtwQEngAAsAAAtgAAuAAAqAAAmQAAvAEB
+			tgEBkAEBlQEBeQAAZgAATQAAQQAAQwAAMwAADQAAAQAAAAAAAAAAAAAAAAAADAAAKQAASgAAagAA
+			lgAArgAAzAEBxAEBtQAAowAArwAAyAEBygEBtgEBkAAAkgAAnwEBjAAAnAICxwYGuwEBoQEBoQEB
+			tAYGtAUFtwEBvgEByAEBzAEBwAICpAAAsgEBwgEBywEBvwEBsQICpQIBoAEAnQEBogABowEBqwEA
+			tAEBuQEBtgEBswEBsAEAoQEBiAAAjAEAowEAoAEAiQAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgwAAiAAAhwAAmwEBmgEBmgABuwABswEBugEAvAEB
+			pQEBvAEBswEBrgEBpAIBngEBqwEBnQEBmAAAvQAAyAAAuwEBpwAAuwEBwAEBtQEBmgAAlgAAnQEB
+			pwMDxgoKygICsAAArQMDxAICtAMDogAAugEBqgAAvAEBpAAAqwAAxAEBrAEBjwAAlwEBcwAAaAEB
+			TwEBSQAASgAAMQAABgAAAAAAAAAAAAAAAAAAAAAADgAAMQAAXAAAlwAAogAAyQEB0AEBtAAAnQAA
+			ogAAxAEByQEBwQEBmQAAiwAAqAEBmwAAlAAAvAQExAMDogEBoQMDuAICwAQEvAICxQICzgEBzgEB
+			xQICowICmwICmQICnQEBpwEBmwEBowEBsQIBuwEBvgEBwAEBvAEBrwEBoAEAkQAAjQAAkQAAkAAA
+			hgAAhQAAnwEAowAAiQAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAhwAAjwAAkQAAmgEAsgABsAABugEBuwEBowEBugICsAEBngABmgEB
+			lAEBqQEBlgEBmwAAvQAAywAAuAAAogAAvAEByQEBsAEBnQEBlAAAnAAArwQEyQsLyAMDsQAAsQMD
+			vQEBuQMDrAEBsgAAtQAAuQEBrAAAvQEBwAEBnQEBkgAAjgAAdAAAZwAAUwAAVQAATwAAJgAAAwAA
+			AAAAAAAAAAAAAAAAAAAADgAANgAAhgEBtAEBvQEBxwEBwQEBnAAAogAAvgEBxQEBxwEBqQEBjAAA
+			nQEBqgEBnAAArgEBwwEBpAEBmwICvAICwgEBwAEBywICzgICwwAAswICqQgIlQQDlgQClQEBngEB
+			qAEBtAEBwgEByAEBwgEBtwAArQAAogABkAAAiAAAiAAAmwAAoQEBkgEAhgAAigAAmgEBiAAAggAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAhgAAhwAAjgAApAEBqQEBuAEBugEBogEAtwICrAIClgEBlgEBmgECqAEBkQEBowEAwgAA
+			zgAAtAEBpQEBwQICyAICowIClwAApgEBrwEBtQQEzAwMxgQErgEBuAICtQICvwICsQEBqwAAuQEB
+			sgAAtgAAwgEBrgEBqgEBkAAAgwAAeAEBZQAAWgAAYwEBTQAAFQAAAQAAAAAAAAAAAAAAAAAAAAAA
+			DQAARwAAtgEBvwEBvwEBswEBrAAAmwAArAAAwgEBxQEBuAEBlgAAkAAArgEBmgAAogAAvAAAqQAA
+			kgAAtgICywAAwgEBxAAAzwICuwEBoAEBoAUFmgMDrgQEsgQDqgEBqAEBrwEBwAEBxwEBvgEBswAB
+			rAAAoAEBmAAAnwEBmgAAoQAAtwEBsgEApgEBjQAAmQEAhQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgwAAhwAA
+			kAABogEAtgECtgEBogEBtAICrAIClgEBlwEBqwEBnQEBlAAArAEBwgEAzAABqgEBsQICwAICtAIC
+			kgEBpQICvQICvQEBuAQEzwsLxwYGtAEBvAICqwICwQICrAEBrQEBugEBrgAAuQAAvAEBpgEBtAEB
+			igAAgAAAewEBYwAAbgEBawEBQQAACQAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAeAEBtgEBvAEBpQEB
+			tgEBqAAApgAAugAAwAAAwAEBpwEBjgAAowEBmwAAlwAAsQAArwAAmAAApgAAyAEBxgAAugAAygEB
+			vAIBowAAowICngICpQUFtAkJpAYFngICrgEBwQEBxQEBtQEBqQEBqAEBmwAAjwAAkQABkAEAmAAA
+			tgEBugEBrwEAkwEAhgAAjQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgwAAhgAAmQAAsAABswEBogEB
+			rwICqQIClgEBmwEBtwIBnwEBmAAAswEBwAIBwgEBqAEBugMDrwEBqwICpAMDuQICxwICvwEBvQMD
+			0wsLywcHvQAAtgICrwEBvwICqgEBtgEBuAEBsgAAxAEBrgEBtQEBpgEBhAAAgwEBegAAawEBfAEB
+			agEBKgAAAwAAAAAAAAAAAAAAAAAAAAAAAQAALwAAqAEBrAEBqAEBnAAAxQEBvgEBwwAAxQAAvwEB
+			tQEBkwAAkgAAogAAkwAApQAAsQAAlQAAogAAuAAAxgAAvgAAxwEBxwEBpwEBoAEBpAMCngMDvQoJ
+			uAkIqQQErwICwwEBwQEBrgEBqAEBpQEBkgAAjAAAiwAAhgABjQAAtgAAvAEBpQAAlAAAhQAAiAAA
+			hQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggEAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgwAAkQAAqwAArgEBowICrQICqwEBmAEBpwICqQEB
+			rwIBmgAAuQEAuwICtQEBqAEBrAICrgICwwUFqgMDxgICyAICvwEBwwIC2AwM0QcHxAAAsAICvAIC
+			sQICrwEBvgEBswEBwwEBuwEBrgEBvgEBlgEBiwEBhQAAdAAAegEBfwEBZgEBHwAAAgAAAAAAAAAA
+			AAAAAAAAAAAACAAAWwEBqQEBpQEBmwEBqAEBygEBxwEBxQAAwgEBtAAAnAEBiQAAnwEBlgAAnQAA
+			sQAAowAAngAAqgAAtwAAxgAAygEBzwICugMCmgAAqwEBngEBrwcHsg0MoQoIqgMDwQEBtgEBowEB
+			rQEBowEBkQAAmAEBpgEBrgEBrQEBrwAAuAEBnQEAlgAAiwEAhAAAiwAAggAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQEAgQEAgAAAgQAAggAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAhwAAoQABqwAApQECrAICrAEBoAEBsAEBnAEBsgEBnQAAvgEBuAICpgEA
+			pwECsQICxgICygcHrAICywQEwQMDrAAAxAEB3goK1QYGxgICugICsQICpQICuAEBxQEBtwEBvwEB
+			qQEBvwEBuQEBjQEBkgEBkQAAegEBiQEBgAEBXgEBEwAAAQAAAAAAAAAAAAAAAAAAAQAAGQAAmgEB
+			ogEBmgEBlAEBqwEBygEBzgEBwQAArgAAnQAAigAAkwAAngAAngAArgAArAAApQAAoAAArQAAwwAA
+			zAAAzgICzgUFpwICowICngICnQMDqAcGmQgHlgUFtQIBrwEBmwICogEBlwEBiQAAnAEBsQEBrQAA
+			rQAAqwAAuAEBlQAAmAAAngEAigEAgwAAhgAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQEAggAAgQAAgQAAggAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			ggAAjwABpAAApQABrAICrQEBrAEBqwEBmgEBswEBowAAtwEBsQICmwEBtQICygMDyQMDwgUFtAMD
+			yAUFuAICpQAAxAAA3wkJ1gUFxAICvwICpQICpgMDvgEBxwEBvwEBrQEBvQEBxgAApgEBkQEBpwAA
+			mAAAkAEBhgEBfQEBOwEBBgAAAAAAAQAAAQAAAAAAAAAABgAAPQAAmgEBnAEBjgEBjAAArgEBywEB
+			yAEBrwEBmgAAlwEBigAAnwEBoAAArAAAtAAApwAApQAApwAAvAAAxgAAzQAAzAQEvgQEmAICqwUF
+			mAMDpAYFnAIClwICsgEBsAEBnAEBlwAAlAEBjgEBnAICtwEBuwEBvQAAvgAAuQEBmQAAkwAArgAA
+			mQEAhwAAhAAAgwAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAgAAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAhgAAnQAAowABrAEB
+			qgEBtAEBpQEBrAICswEBqAEBqQIBrAIBngEBxwICzQQDygQEugQEvAQEvQQEtwICpAAAyQEB3QcH
+			2AYGyAEBvAEBowICqAMDwwAAxQAArQEBuQEByQEBuwAAmwEBmAAArQAAkgEBmQEBggEBZQEBEwAA
+			AQAABAAACAAABgAAAAAAAQAAGQAAgwEBmAEBlAEBhgAAiAAAugEBzAEBtAAAlwAApAEBjgAAnAAA
+			nAAArwAAugAArAAArAAApgAApgAAuQAAxAAAyQEBwQYGogICpAUEoAQEoAQEqQQEpAEAsAEBrwEB
+			nQEBmwAAoAEBmwEBlwEBvwIBvwEBvAEApAABrgABogEBlgAApwEBmAAAjQAAiQAAhgAAggAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQEAgQAAgQAAggAAggAAgQAAggAAggAAgQAAggAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAkQAAmgAArQEBpgEBswEBpwABwgEBqwEB
+			ogEBqQIBpwEBpwEBxwICwgMDywMDrwICvwUFvwQEvAMDqQEB0gUF3AcH1wYGygEBtwEBoAEBrAIC
+			wwAAtQAArQAAygEBvwEBpQAAmgEBqgAApwAAkAEBkwEBegEBMQAABAAAAgAADwAAEQAAEAAAAAAA
+			BwAARQEBgAEBlAEBjgEBhQEBkQEBwgEBvgEBnQAApAAAoAEBkQAAoQAApQAAtgAAsQAAqgAAqQAA
+			oQAAowAAuQAAwwAAwAICqwMDmAICqwgHlAICoQUFpQECtgEBsQEBlQEBkwAApAEBrAEBlAEBtgEB
+			xQIBvAIBlwEAkgABogEBlwAAnAAAlAAAlgAAlQAAiwAAiAAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAggAAgwEAggEAgQAAgQAAgQAAggAAgQAAgQAAggAAgQAAggAAggAAgQAAgAEAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAjAAAlAAArgEBqwEBrAICuwEBvAEBoAAAogAAtQEBnwEAqgEBtQID
+			wQICxwEBqwICwAMDxQQEtQQEswMD1QYG2goK0gQExQICtwAApwEBuAEBuQEBpAAAwAEBygEBsAAA
+			nwEBowAAsQAAnAAAfwEBgQEBWgEBDwAAAQAACAAAFgAAHAAAFgAAAAAADwAAUAEBcQAAiQAAiwEB
+			gAAAmwEBwAEBpgAAnAAAtAEBmAAAoQAAoQAAugAAswAAsAAAqgAAogAAnAAApgAAtwAAwgEBswIC
+			ngICmAMDnAQElQEBlQEBnAAArQEBoAEBlgEAmAABsQEBnQEBqAEByQEBwQICnQIBiAEBmgABnAAA
+			mwEBkQAAmgABogABmAAAjQAAiAAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAggEAggAAgQAA
+			gQAAgQAAgQAAggAAggAAgQAAgAAAgQAAggAAgQAAgAAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAiAAAkAAAsQEBswEBtAABuwEBqQABogAAtQEBugEBmAAAowEBwAEBxQEBuAEBtQEBvQICugcH
+			rQMDxgQE0wgI1wwMzwMDtwMDvAAArQAAtgAAqQEBuAEBzgEBxQEBogEBngAAqwAAsQAAhgAAdwEB
+			bAEBNAAABAAABAAAGwAAJwAAIwAAEwAAAQAAFAAAZQAAbAAAiwEBhQEBfgAApgEBsgEBlAAApQAA
+			sAEBnwAApwAAsAAAvgAAwQEBtQAApQAAmgAAnAAArAAAtQAAwgEBpQAAkgAAlgEBkAABkwAAlwAA
+			sgEBpgEBoAEBnAEBogEBsQEBoQEBwwEBzAEBsgECjgICkQEBmQAAmgEBiwAAkgEAogABpQABmAAA
+			kQAAiAAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAggAAgQAAggEAgAAAgQAAgQAAgAAAgQAA
+			gQAAgAAAgAAAggAAgQAAgQAAgAEAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAhgAAmgEAuwAArwAA
+			rwABqgICoQEBsAEBxAEBqgEBkgEArwICywEBvAEBtgEBuAEBpwICrQcHuwICzwYGzAkJ0QkJyQQE
+			tAEBuwEBrwAArAAAuwAAxQAAzQEBuAEBmwEBrAAAswAArAAAdgAAbAEBTgEBHgAACgAALgAAQAAA
+			NgAAJQAAFgAAAQAACQAAVgAAbQAAiwEBgQEBfgAArwEBmgAAnAAAswEBpQEBogAAqwAAvQEBvgEB
+			sQAAqAAAngAAmgAAnwAAqwAAswEBvwEBmgAAlAAAnwEBkAAAjgAArAEBtQEBnwEBnwEAoQEBrwEB
+			rAEBuQEByAEBvwEBqAECoQEBkQAAmQAAlAAAkgABlwEBoQAAmgABkgAAkAAAiQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAggAAgQAAggAAggAAggEAgQAAgQAAgAAAggAAgQAAgAAAgQAAgQAAggAA
+			gQAAgQEAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAhAAAoQEAvAEBpQABrgEBqAICngEAxQEBwAAA
+			lAAAoAEBxgEBzAEByQEBtwEBoQAAmwEBsgMDygIC0AcHywUFzgUFwQMDlgAApgEBqQAAuwAAxgEB
+			ywEBxgEBpwEBngAAtQAAtwAAoQAAagAAWAEBNwAAGgAAOAAAWgAATAAANgAAJAAAGAAAAwAAQwAA
+			VgAAbwAAhAEBfAAAhAAAqwEBlAAAqAAAtQEBoAAAowAAtgAAxwEBuwAArgAAqAAAogAAowAAnQAA
+			pgAAsQEBtwEBlgAAnwAAoAAAkwAAlgAAvQEBpgEBmAAApQAAoQAArgEBvwEBxAEBxgEBpgEBpAEB
+			lAEBmAEAnQAAmAABlwABngABnwEBjgABkQAAlAAAjQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgwAAgQAAggAAgAEAgQAAggAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQEAgAEAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAhAAArAEAqgAArwEBrQEBsQEBqQEBwwEBsAAAmgAAvgEBygEBywABvAEB
+			oAAAnQAArQAAxQICywICzgQEyQICuQUFpQEBkgAAsQEBwgEBvwEBwQEBxgEBsQEBpgEBrgAAvAAA
+			twAAjwAAWgAASQAANAAASgAAZgAAXwAASwAANQAAJgAAFwAABQAARAAAWQAAeAEBggEBfQEBiQEB
+			ogEBlgAAtQEBrgEBngAApgAAwAEBwAEBxQAAtQAAsQAArQAAoAAAmgAAqwAAsQEBrQEBkgAArQAA
+			nAAAlgAAqwEBnwEBmQAApQAAqQAAogAAtgEBuwICvgEBsAEBoQEBlAABkQEBoAAArwEBoAABpQAB
+			pAABmgAAiwAApgABngAAkgAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAgwEA
+			gAAAggAAgAAAgQAAgAAAgQAAgQAAgQAAgQAAgQEAgQEAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			iAAAtAAAtQEAvAEBtAAArQEBsQEBwQACpwAArgEByAEBywEBvAICpwEBnwAAuAAAzQEBzQEBxAEB
+			zgICuwEBrwMDsgICugEByAEBxAAAtQAAvwEBuwEBrwEBugEBwgEBvAAArwAAcQAAVAAANwAAWAAA
+			dAAAcwAAXwAASAAAMgAAIgAAFgAAEgAASQAAXgAAgAEBgAEBegAAkwEBoQEBpAAAvQEBpAEBoQAA
+			vQEBugEBsQAAugAAvQAAtAAArQAAngAAnQAAswEBswEBogEBnAAAsQAAnAAAngAApAEBmwEBoAAA
+			swAAqAAArgEAswEBsgEBugEBpQEBmgAAkAAAmQABuwEBpQEBqQEBlQEBnQABjgAAjQEBswEBoQAA
+			lAEAgwAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAgQAAgQAAggAAggAAgQAAgAAAgQAAgQAA
+			gQAAgQAAgwAAgQAAgQAAgAAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAlgAAuwEBwAEBtgAAsgEB
+			oQEBuAEBvgEBowAAwAEBzgEBxQEBoQEBmgEBsgABzAEBzQEBzQEByQAAxQEBrwAAuQAAyAEBygEB
+			xQAAwQAAtgAAvAEBuQEBtAEByAEBwAAAuwAAoQAAYQAATgAAWAAAcwAAgAAAcQAAWgAAQgAAKQAA
+			IQAAFAAAMgAAWQAAawEBgAEBfgEBeQAAngEBpgEBtgEBtwEBmAAAuQEBvQEBtwAAsQAAuAAAsgAA
+			qgAApwAAmgAAoQAAugEBtwEBnQAApwAAqgAAnwAApwEBnAEBoQEBtQAAuAAAsgAAtQEBrAEBtgEB
+			qwEBlwAAmQEBjAAAtQEBugECpgEBogEAjwEBmwABjAAAjQAAtwEBogEAkAEAhAAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgAAAgQAAgQAAggAAggAAgAAAgQAAgAAAgQAAggAAgQAAgAAA
+			gAAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAApQEBuAEBtAAAtwEBpgEApgEBwgEBsQEBrgEBywEB
+			zwEBtQEBngAAqwEByQEBzgEBzwEBzwEByAEBswAAqwAAxwEBzQEByQEByQEBwAAAxAEBsgEBoAAA
+			oQAAvQEBvQAAuAAAgwAAYwAAeAAAhwAAjgAAhQAAbgAAUwAAOwAAKAAAIAAAEgAAPAAAYQAAdQEB
+			gAEBewEBegAAqAEBpQAAvQEBpQAAsQAAwAEBzQEB0AEBuAAApQAAowAAnQAAmgAAmQAAqwAAvQEB
+			uAEBmgAArwAApQAAngAAowEBnwEBowAAqQAAuwAAwAEBrwEBsgEBrQEBmgAAmAEBkgAAoAEByAEB
+			sAICrQEAlgEBlgEBlQAAjwABjgAAuQEBpAAAjgEAhQAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAggAAggAAggAAggAAgQAAgQAAgQAAgAAAfwAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAhAAAqgEAswEAtQEBrQAApAEAuAEBvwEBpAAAuQEBzQEBwwEBnwEBogABxAEBxwEB
+			xQAAygEBxgEBtAAAqwAAwAAAyQEByQEByAEBugAAxgEBwAEBpAAAogAAqAAAwQEBvQAAqwAAbwAA
+			jgEBnAAAlgAAlAAAggAAZwAASQAAMwAAKgAAHgAAEAAAQAAAZwAAdQEBfwEBeQEBgQEBqwEBnAAA
+			pQAAqwAAwAEBzQEB0QEBxQAApAAAmQAAmAAAmgAAlwAAnwAAswEBvwEBswEBowAAtAAAngEBoAEB
+			lAAAngEBogAAsQAAwQEBtAAAtAEBrAEBqgEBlQAAlQAAlgEBtgIByQECuQICqwEAmQEAngEAkgAA
+			jAAAjQEAuAEBqAAAjQAAhgAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgAAAgAAAgAAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAjAAAsAEA
+			swEBnQEApAAAqwEBwAEBrgEBpQAAxQEBxgEBsAEBnwAAugEBwAIBuAEAwAEBrgEBpgAArQAAuAAA
+			xgAAygEByQEBwgEBuQAAzAEBuQAArwAAwgEBxgEBywEBtAEBewAAhwAApwAAnwAAlwAAjgAAewAA
+			VwEBPQAAMwAALAAAGQAAAQAAQwAAaQEBeAEBgAEBegEBigEBqgEBmAAAqQAAyAEBzgEB0QEBxgEB
+			qAAAlQAAlgAAmAAAnQAAngAAogAAugAAwgEBrQAArAAAsAAAmAAAnwEBiwAAjwAAogAAtwAAuwAA
+			rwAAugEBrgABpgEBjwAAmAAAoAICxQEBxAECwAICpQICnwIAlQAAkAEAhwAAigAAtwEBqAAAjQAA
+			iAAAgwAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAlgEBsQEBmgEBpAAArAEBvQEBwAAB
+			pgEBtQEBwAEBuQEBnAAArwEBtgEBrAEBuAEBsgEBmgAApgAAtQAAwgEByQAAywEBxwEBuAAAxAEB
+			ygEBwwEBwwEByQEBygEBywEBogEBYAAAmQEBqQAAmQAAjwAAigAAbwAASAEBOgAANwAAKgAAFwAA
+			AAAAUAAAbAEBfQEBewEBgAEBlwEBpQEBnwAAwgEBzwEB0AEBzQEBrQAAlgAAlgAAngAAngAAmwAA
+			nQAAqAAAwwEBwwEBpgAAuQEBoAEBmQAAmwAAiQAAjgAAsAAAugAAsAAAuAEBugEBtQEBoQEBjgAA
+			pgEBrwICygEBwgEBvQEBoQICmAEBjwAAlAAAigABkAAAuwEBqAAAjwAAiAAAhAAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgAAAgQAAggAAggAAggAAggAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAigAApgEBmgEAqwEBuAEBtwEBwgEBsgEBnwEBrgICvwEBqAAAqgEB
+			tgECnwEBsAEBugEBoAAAnQAAswAAvAEBxgAAygEByAEBvwAAwAEBxAEBxQAAvgEBuAEBsQAApwAA
+			pgAAnQAAewAAiAEBlQAAeAAAjwAAfgAAZgEBRQAAPgAAOwAAJAAAFQAAAAAAVgAAbAEBfQEBeAEB
+			hgEBogEBqQEBuAAAywEBzwEByQEBqQAAlgAAlAAAlwAAowAAoAAAnwAAoAAArwAAyAEBvQEBpwAA
+			uAEBlwAAmQEBjgAAjQAAmAEBtQEBsAAAtwAAwgEBrwAAuAEBlQAAnwEBswEBvgEByQEBxQEBugEB
+			ngICkQEAkwEBpQEBlAABkgAAwwEBqwAAlQEAiQAAhQAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			ggAAnAEBmwEBsAEAxgEBtgEBuwEBswEBmAAAqwEBwwEBsQEBoQAArgEBsQEBqQEBwAEBrwEBmAAA
+			qwAAvgEBwwAAzgEBwwAAyAEBuwAAxgEBwwEBwQAAuQAAsgAAmQAAkAAAjwAAngAAjQAAcAEBbgEB
+			fgEBhwEBewEBWQAARQAASQAAOQAAHwAAAAAAAAAAVgAAbQEBegEBdwEBhgEBqAEBrgEBwAEBzQEB
+			ywEBqwAALgAAJQAAOQAAlwAAnAAAnQAApAAApQAAvQAAzAEBtgEBrwEBqQEBkwAAnAAAhQAAmAEB
+			pAAAuQAAuQAAvAEBtQAArQAAsQEBkQEAtQEBtgAAxQEBygICyAEBsgEBmgEBjQEBlgAAtwEBlwEB
+			nQABwwEBswAApwEAjgEAhQAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAigAAjgEBpQABwwEBxQEB
+			vAEBrAEAowEApwEBxQEBuwEBnAAAnAAAtAEBsAABvgEBuQEBmwAAnwAAuwEBxQAAzQEBygAAxwEB
+			wgAAuAAAzgEBxgAAvwAAvwEBrwAAoQAAowAAqgEBtwEBowEBeQEBeQAAkgEBjAEBawAAVAAATgEB
+			TgAAMAAAHQAAAAAAAAAAWAAAbQEBdAEBeQEBhwEBoQEBrgAAxQEBzAEBtgAAMQAABwAACgAAKAAA
+			lQAAlgAApQAApQAApgAAvwAAzAEBrgEBswEBmQEBlAAAkwAAhAAAqAEBpQAAvAEBwwEBsgAAqwAA
+			sgAAogAAmwAAuAEBuAAAxwEBzAICyQEBpwIClQAAjwEBoQEBwQEBmAEAswABwAABtQAArgAAlAEA
+			iAAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAiwAArQEByAEByAEBuAEBsAEBrgEBqQEBwAEBvgEB
+			mgAAjQAAqgEBvQEBxAEBvgEBowABmAAAtAEBxgEBywEBzQAAxwEBuwAAuAAAvQAA0QEBxQEBwQAA
+			wgEBwQEBugEBqwEBngAAkwEBfQAAfQAAlgEBlgEBfQAAZQAAVwAAWwAARwAAKgAAGwAAAAAAAAAA
+			VQAAawEBcgEBfQEBjgEBogEBuwEByAEBwAAAVAAADgAAAAAAAAAAHwAAWAAAlgAAsQAArgAApAAA
+			sAAAwQEBqAAAtAEBkgAAlgAAigAAhwAArgEBqwAAwwICvQEBqgAAqAEBtAEBnAAApQIAsAEBwAEB
+			xwEBzQEByAEBnAEBkwAAkgEBrAEBwAEBnQEAugEBvgAAuAAArgAAoQEAjQEAgwAAgwAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAiwABqwABwgEBvQEBqwIBuAICtAEBsAEBvwEBwAEBowEBlgAAtAEBzAEBygEBugAC
+			pwABkwAAsQEBvwAAyAEBzQAAygEBuAAArwAAugEByAEBzQEBvQAAugAAtQAAqQAAmQAAkQAAmAAA
+			lwEBeAAAoQEBogEBiAAAbwAAXwAAZQEBYAAAQwAAJwAABgAAAAAAAAAAVgAAaAEBbgEBgwEBoAEB
+			qQAAvwEBxAEBfAEBJwAAAAAAAAAAAAAAIAAAYAAAlwAAoQAAtQAAqAAApAAAugEBqQAAqgEBkAAA
+			lwAAhgAAjgEBswEBuAAAwgMDsQMDqQAArQMDswICoQEBpAIAsQIAxgEBwgICygEBwAEBlAEBlwAA
+			kgAAsgEBwQEBnAEBqwEBuAAAvgAAswAArgAAlAAAhgAAhQAAgwAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAjgEBqwEBtwEB
+			qQEBngEBrQICwQEBvgEBvgEBuwEBqAEBnAABuQEBzQEBxwEBsgEBoQAAoQAArQEBuAAAwAAAywEB
+			ywEBvQAArgAApwAAvwEByAEBxAEBsAAApgAApQAAnQAApgAAvQEBxQEBnAEBnwEBrQAAlQAAeQAA
+			cQAAaQAAbgEBXAAAOwAAJAAABgAAAAAAAAAAUAAAZQEBbAEBhQEBlwEBqQAAvQEBowEBOgAADwAA
+			AAAAAAAAAAAALAAAlAAAmwAArwAAtgAAswAAqQAAsAAArAEBnAAAkwAAlAAAhAAAmQEBvQAAuwIC
+			vAUFrAMDqAEBsgYGtwICpgIBpAIBtgIAxgEBugECxgEBtwEBjgEBmwEBkAAAtgEBwQECoAIAoQAA
+			uAAAxAAAtQEBsQEBpgAAigEAiQEAjAAAgwAAggAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAhAAAmQEBpgEBnAABlQAAlwEBqgICvwEBxAEBtwEA
+			rwEBnQEBlAAAqQIBvwEBtQEBmwABmAAAqgAAuwEBvwAAxwEBzAEBygEBuQAArQAAqAAAqgAAyQEB
+			yQEBtgAAoQAAqQAAsQAAvwEBzQEBzwEBxgEBpAEBrgEBngAAhgEBfwEBcwAAeAEBbgEBUgAAMQAA
+			EgAABQAAAAAAAAAARQAAYQAAawEBgwEBhwAAqgEBuQEBZwEBCwAAAQAAAAAAAAAAEgAAQwAAlgAA
+			ogAAuQEBvAAAqQAAuwEBqwAArAEBkgAAmwAAjwAAgwAAqAEBwAEBsgQEuwgIrQICqQEBuwYHuwEB
+			pwMDrQICuQEBxQEBtAICxAEBqAEBkgEBnwEBkAABuQEBvgIBogEBnwAAvgEByAEBrwABpwAAtwAA
+			kgEAjAAAkAEAkgEAkAAAhAAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAA
+			gQAAgQAAgQAAhQAAkQEBkgEBhwAAiQEAlQABrQEBvQEBuwEBtQEBrwEBnwEBnwEBsQEBsgEBogAA
+			jwAAkgAAqAAAvwEBygEBzAAAyAAAxwEBvwEBpwAApwAAqwAAvAAA0AEBwwEBpwAApQAAswEBvgEB
+			ygEBzgEByQEBwgEBtwEBnQAAhwAAhwEBgQEBfgAAegEBZwEBRQAAIAAADgAABAAAAAAAAAAAOwAA
+			WgAAYwAAdgEBgAAAogEBkAEBIwAAAgAAAAAADAAAGgAAMwAAlAAAngAAuQEBsQAAtAAAowEBwAEB
+			pwAApgEBkgAApAAAjAAAhAAAuAEBvgICsgkJvAoJrAEBpgAAugMDtgMDsgMDqQICwAEAwAEBswIC
+			vgEBnAAAmwEBnwEBjwEBvgEBuQEBpQEAogEBwQEBxQEBrwABpQABvwEBngAAjwAAngAAjgEAngEA
+			pAEAjAAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAgQAAggAAgwAAhAAAhgAAiwAAjgEBjQEB
+			iwEBlgEApgEAtQEBtAEBrgICrwICqwEBoAEBnwEBngAAmgAAkwAAlgAAmQAArQAAyQEB1AEB0AEB
+			yAAAxgEBxwEBugAAoAAApAAAwwAAygAAzQAAuwAAsQAArQAAsQAAwAEBxQEBwgEByQEBxgEBngAA
+			kAAAlAAAlwEBhwAAhgEBdAEBVAAAPAAAFwAACgAAAwAAAAAAAAAAJwAAUQAAXgEBYQAAgAAAlAEB
+			XQEBCQAAAAAAAgAAHwAAPQAAkwAAmAAArwAAvAEBswAAnwEBogEBugEBpAAAnQAAlgAAqAEBjQAA
+			igEBwAEBuwcGww8OvQoJrgAArAAAsQEBuQQErAMDrAICwQEBvAICrQICsgEBmAAApAICnAEBjgEB
+			wAEBtgEBqAEBogEAwgEBwQEAsQEBpAAAvAEBsgAAmAAAqAEAkwEAjAEAqgAAswEAjQAAggAAgQAA
+			gQEAggAAiQAAhgAAgQAAgQAAgQAAgwAAiQAAhwAAjAEBqAEAugEBvgEBvwEBvQEBswEAqAAAowEB
+			pAEBnAAAkwAAlAAAmgAAnwEBpwEBqgEBqgAAvAAA0QEB1AEBzwAAyQAAygEBzgEBxgAArQAAoQAA
+			ugAA0AEBygEByAEBrQAApwAAtAEBxAEBvQAAuAAAvwAAxgAAvgAAmwAAoAAApwAAkgAAjgEBggEB
+			YQAARQAAGwAADwAABgAAAgAAAAAAAAAAEQAARwAAWQAAXQAAewAAhQEBOgAAAwAAAAAADgAANQAA
+			YgAAlAAApQAAuAEBtQAAsAEBlAEBqwEBsgEBoQEBlAAAmwAAowEBjgAAlQEBwAEByg8O1hUVwAoJ
+			swAAswAAqwICuwQDsQQDtAICwQEBuwICqgICpQEBowEBqQICnAEBjQEBvwEBsQEBqwEBpQEBvgEB
+			wAEBrgEBqAEBrQABvAEBoAAAnwABqAEAjQEAjwABswEBrQAAjwEBggEAggEAhAEBmwAAqwAAlQAA
+			hAAAgwEAjgEBnwAAmwEBlQEBmQEBoQEBogEAowEAogEAmgAAlQAAlwEBoAEBqAEBrwEBugEBtwEB
+			twEBswEBswAAygAA1gEB1AEBzwEBzQEBzAEBxQAA0gAAvgAApwAAtwAAzAAAzQEBwQAAswAArgAA
+			twEBvQAAtAAAsgAAtwEBvwAAxAAArAEBogEBtQAAqwAAmQEBigEBdwEBTQAAQgAADAAABgAAAwAA
+			AQAAAAAAAAAACwAAOgAAUAAAVgAAcwEBbQEBKAAAAgAAAwAAIAAATAAAkQAAlwAAsgAAxgEBrwAA
+			mQEBlQEBswEBrwAAnAAAlQEBogAAnAAAkgEBoAICwgQE3RUW4xcXwggIvAAAqgAAsAEAvAICvQEB
+			swICxAEBuQEBpwECngAArgEBqwECmwEBjgEBuwEBtAEBpAEBpgEBuwEAwwEBqwEBrAEBqQEAvQEB
+			pwAAmwAArAAAnAAAiwAAnAAAtQEBqAEBlAEBhwABhAAAkwAAuAEAvQEBqAABkgEAkAAAngAAtwAB
+			qQEBnwEBowEBogEBpAEBrwEBtAEBvQEBwgEBxwEByAEBxQEBvwEBtQEBqgIAsQAAwgEB0AEB0QAA
+			zQEBzQAA0QAAuwAAxwAAxQAAswAAuAAAyQEBzQEBvQAAvAAArAAApwAAsgAAsQAAsgAAtAAAvAAA
+			wgAAwAEBogAAuAEBtQAAqAAAjwEBhQEBYgAAQgAAEAAAAQAAAAAAAAAAAAAAAAAAAAAAAwAALAAA
+			RgAAUAAAXQEBSAAAJAAAFQAAGwAANgAAYQAAkAAAowAAwAEBuwAAqAEBkgEBnwEBtAEBqgAAlgAA
+			mgEBpwEBmAEBlwEBrAEByQkJ3xQU4BMUwwYFvAAAqAAArQEBxQICwwICswICxQEBugEBoQICogAA
+			uAICrQIClwAAjwEBtwEBtwEBoAEBqwEBwgEBwwEBrwEBqgEBugEBsQEBsQEBqwEAngEBngEBmAEB
+			iwABpQEBqwEBoQEBoAEBlgEAiAEAlAEAtAAAwwEBvgEBsQAApgEApwABuQEBtAEBpwEBoAEBnwEB
+			pgEAtwEByAEBzgEBzgEBzAEBxgEBvwAAvQEAvgEAwwAAyAAAywAAzAAAzwEB2QMDwwMDwQMDygMD
+			uwEBxwAAxwAAyAAAwAAAugAAtAAArQAAuQEBtQAAqgAAqQAAtQAAuAAAxAEBsAEBsQAAtAAAqAAA
+			oAEBjAEBeAAARAAAGwAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAACwAANwAARAAAMwAAMAAAKwAA
+			LAAANgAATQAAiwAAkwAAtAAAuQEBtgAAnAEBkAAAqwEBqAAApgEBjgAApAEBrgQElgEBmQEBtQIC
+			zgwM1w4O0wwMwgMDtwAArAAAqgEAywICwgIBrgEBwwEBuAMDnAICrwICvgQErgMDlQAAkwEBtAEB
+			uQEBnwEBrAEBxAEBugEAswEBowEAxAEBtgEBsQEBtQEBpQEAlQEBpAEBngEBlQEAqgAAqQEAogAA
+			twEBogAAjAABjQABogABtgAAwgEByAEBvwEBtwEBvAEAtgEBtwEBwAEBxwEBzAEBzgEBzQEBywEB
+			ygEBywEBywEByQEByAEBygEBywEBzAEBzwEBzgMDwwQEvgcHyAkJxgYG1AQEzgEBxwAAvAAAtQAA
+			tAAArQAAuAAAswAApgAAqwAAtQEBtQAAxwEBwwEBpgEBqgAApQAApgEBkAEBhwAAUwAAJwAAEAAA
+			AwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAwAAKQAAOAAAGQAAJAAAMgAAQgAAUAAAgQAAigAAngAA
+			rgAAswEBtQEBjQAAlQEBqAEBogEBngEBigAAsQAAswQEmAEBoAEBvAMDyQoKyQcHyAQEuwICugAA
+			pwAAsQAAzQICwAEBqwAAvQICsQMEmQICtwEBxQYGrQUFlQAAkwEBsAEBsgEBnQEBqwEByAEBtQEB
+			twEBoAEBvAEBwgEBrwEBrgEBtwEBlwEAkQEAqwEBqAEAmwEBrQEBqgABrAABswEBqQEBngABkAAA
+			mQEBoAEBrwEAxgEBxgEBxwEBywEByQEBxwEByAEBwQEBtwEBrwEBrQEBswEBtgEBoQIAnAEApwEB
+			tAEBvgEBugEBsQEBrQMDuAgIwwsLygkJ2wcH1wMDywAAuwAArQAAuQAArQAAsQAArwAAqQAAswAA
+			tgAArwAAwgEBxwEBpQEBmQAAoAAAsQAAlwEBkAEBaQAAOwAAFQAABwAAAQAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAALgAABwAAGwAANQAAUQAAcwAAfwAAjgAApwAApgAAswEBpwEBjgAAnAEB
+			jwAAsAEBlwEBjAAAtgAAsQMDnQEBpwICugICtgUFvQEBwwEBuQABuAAAqQAAtQAA0AEBwwEBrgEB
+			vgMDpwEBngMDtwMDyQYHrAcHlQEBlAECrgEBpwEBngEBpgEBywEBtQEBuQEBogAAsAEBvQEBtwEB
+			pwEBvgEBqgEAiQEAjwEAqAEAsAEBpQEAsgEBswEBswEBtQEBqAEAoAEAmwEAnAEAoAEBqQEBtQEB
+			tQEBvQEBxAEBvQEBswEBrAEBsgEBtgEBugEBtgIApgIAqAEBswEBtAEBqgEBnwAAlgAAlgICqggI
+			yA0N1QkJ2QYG1AMDygEBswAApgAAswAAswAAqwAArwAArQAAugAAvwAAtwAAvgEBxwEBpAEBlwAA
+			qAAAuwEBsgEBmAEBewAARAAAGQAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAQAAFQAAMwAAVAAAbwAAeQAAlgAAnQAAoQAAuAEBmwEBjAAAlgEBigAAugEBjwEBlQEBuAEB
+			rwEBoAICsAICvwMDsgMDvAEBvwEBwwEBuAAAtgAAsgAAygEBugAAsAAAxgQDoAEBowQErwICxAcH
+			sQYHlgEClwEBqwEBmwEBoQEBogEBywEBvwEBtwEBoQAArwECuQEBtwEBqwEBtAEBwAEBlQEBiwAA
+			kwABnQAAsAEBtgEBsgEBtgEBtQEBtwEBqAEBkQEBlQEBnAEBmgEBnwEBoQEBmgAAlgAAowEBsAIC
+			twEBvAEBvwEBwAEBvAEBsQEBqgEBqQAAnQAAkQIClAICnAMDrwUFyAcH0wYG0wUFzAMDvQEBrAEB
+			oAAArQAAvgEBrAAAqwAAqQAAswAAugAAuAAAvQEBwgEBqQEBlgAAqgAAtQAAvQEBrwEBiAAAUAAA
+			KQAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAQAAEwAASwAAWQAA
+			awAAfwAAiAAAjgAAnwAApQEBjgEBjQAAjgAAqQEBuQEBiQAAowEBugEBqwICpwQEuQMDyQYGugMD
+			wQAAwQAAyQEBwQAAvQEBtAAAxwEBsQAArwAAxQICnAEBqAMDqgICuAYGsgQElAEBmgEBpwEBmAEB
+			nwEBnQEByAEByQEBswEAogAAtgECtAECtAECtAEBqAEBvwEBqwEBmAEAlgAAjQAApAEAtQEBtwEB
+			tQEBtAEBugEBvwEBtQEBnwEBmgEBqAEBrQEBsQEBtQEBuAEBvwEBwwEBwAEBugEBtQIAsgIAsgIA
+			tAEBuQEBvgEBtQEBswICvQMDyAMDzAMDygMDxQICvAICtwICrQICngAApQAAwAEBsQAAqAAAqQAA
+			pgAAqAAAsgAAuwEBuAEBrQEBoAEBogAAsAAAvwEBuQEBlgAAWwAAOAAAEAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAQAAAQAAAwAAAQAAAAAAAAAAAAAAAAAAAwAAEQAAQwAAUwAAZwAAeQAAfgAAiwAAoQEB
+			kwEBjQAAkAAAmAAAuQEBrAEBigAArwICvwICowEBrgQEvwQExgUFxQMDuwAAwAAAxgEBxQAAvgEB
+			tQAAyAEBrAEArwAAvAABoQEBqwIBqgEBqQIDpQMDkgAAnQABpAEBnwEBmgEBmgAAwAIBzgEBtwEB
+			pgAArQEBuQEBtQECrgICqgEBtAEBtAEBnQAAsQEAogEBkgEBogEBtAEBtgEBuQEBvQEBwQEByQEB
+			yQEBygEByQEBzAEBzQEBzgEBzwEBzwEBzwEBzQEBzAEBygEBxQEBuwEBswEBrwEBrgEBtgICvwQE
+			wwUFxAUFwgQEtQICsQEBtAICtwICqwEBpAAAvAEBtgAAqgAAqAAApAAAnAAAnQAApgAAsgEBswEB
+			nAAAlwAApQEBvQEBvgEBpQEBYgAAPgAAIwAABAAAAAAAAAAAAAAAAgAAAwAABQAABgAABgAAAwAA
+			AQAAAAAAAAAAAAAAAAAAAwAADgAAPQAATgAAYQAAaAAAdgAAlgAAngEBiwEBiwAAkQAAqQEBtwEB
+			oAEBkAAAtAICwQMDnQEBsQMDwQYGwAMDxQICuwAAwQEByQEBwwAAvQEBtwAAyQEBqAAAswAAsAAA
+			rQAAsAAAqwAApgAAnAAAjgAAnwEBogEBqQEBmwEBlgEBuQICywEBwgEBrQEBqQEBuQIBuAIBugIC
+			rAICpwEBvAIBmwAArwEBvwEBsQEBlwEBmQEBrAEBtgEBtgEBwQECyAEBzQEBzgEBzgEBygEBywEB
+			zQEBzgEBzgEBywEByAEBxgEBxgIAwAAAsgIAqwAArAAArQEBsQICuwUFvQYGtgUFsAMDrgICvQQE
+			ywEBtwAArQAAtgAAtQAAqgAAowAAnAAAlwAAlwAAoQAArwEBoQAAjAAAhQAAnQAAugAAvgEBsAEB
+			fwAAOAAALgAACQAAAAAAAQAAAwAACgAAEgAAFAAAEQAACQAABQAAAgAAAQAAAAAAAAAAAAAAAAAA
+			AwAADAAANwAARQAAVgAAXgAAdQAAoQEBkwEBigAAiQAAkgEBrwEBtQEBlwAAngEBuAICvAICmgEB
+			tgICvgUFwgICwgICvQAAwQEBywEBwQEBvgEBuQAAyQEBqwEBtwQEpwICugICuAAAsAAArQAAmAAA
+			iwAAmwEBnwAAsQEBowEAkwEBtAEBxQEBxQEBtAEBpAEBqwEBvgIBvQICtQICrAEBtQEBrgEBmQEB
+			uAIBuQEBogEBoQICnwECowECswEBuQEBtQEBsQEBrQEBqQEBogEBoQEBqAEBswEBvgABwQACvQAA
+			tgAAtgAAuAEAuAAAsgAArgEBrAAAqQEBqAEBqgMDtQcHxwsL2wwM2gYGugAAtgAArgAAsAAArwAA
+			pgAAngAAmgAAqAAAqgAAoQAAiwAAfgAAeQAAfgAApgAAugEBsgEBkgAANAAALwAAHgAAFwAAHQAA
+			IQAAKAAAOQAAKgAAGgAADwAACAAAAwAAAQAAAAAAAAAAAAAAAAAAAAAAAgAACwAAMAAAQAAATwAA
+			WQAAdAAAngEBjgAAhwAAggAAlwAArgEBsAEBlwAApQEBuwICswICmAEBvQICvwMDvgMDugEBuwAA
+			wAEByAEBxgEBvQEBugAAxwEBswEBuwgIpAUFygcHxwEBtwAApwAAoQAAiQAAlQEBlwAAtgEBqgAA
+			lgEArAEBwQEBxAEBvgEBoAAAqQEBpwEBvQEBwAEBrQICnwEBtgEBpwEBsAEBwQEBsQEBnQEBogEB
+			qgICqgEBqwECrgEBtAEBugEBuQEBswEBsAEBrgEBqwEBpwEBrAEAtQEBuQEBsgAArgAArwAAsQAA
+			qAAAoAAApAEBtgQEzAkJ3A0N3A0NzAcHvgICvwAAugAAtAAAsAAApAAAlwAAkgAAnwAAnwAAlQAA
+			jAAAggAAfAAAegAAggAAlgAAqgAAmgAAgQAAPAAAMwAANQAAcgAAaQAAXAAATAAANQAAIwAAFgAA
+			CwAABAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAgAACQAAKwAAPwAAVQAAYAAAdgAAmgEBigAAgwAA
+			gQAAmwEBrwEBqQEBoAEBqAAAuwEBrAEBlgEBvQICxAMDvQICrgAAvAAAvwEBwAAAygEBwwAAuAEB
+			xwEBvQICugoKrQgIzAsLzQQEuQAApQAArwAAkAAAkQAAmAAAsQAAsAAAmQAAqgAAuQEAxQEBxQEB
+			qwEBqwEBoAIBpAIBvAIBwQIBqgEBowEBpQIBowAAvQEByQEBvAEBowAApwEBrQIBsQICtAEBswEB
+			sQIBsQECsgEBswECtgEBuQEBvwEBwAEBvwIBuAIAwAEBwgEBuQEBtwAAuQAAvAAAwAEBwAICvwMD
+			vgQEvgMDvQICuwEBuQAAugAAtgAAqgAAnAAAkAAAmgAAngAAmQAAkwAAlAAAkwAAiAAAiAAAowAA
+			tAAApgAAlwAAiwAAhQAAhQAAjQAAhwEBdQEBXgAARwAAMgAAHAAADgAABwAABAAAAQAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAQAACAAAJwAAPgAAWgAAZgAAdwAAlAEBhwAAgQAAggAAnwEBsAEBogEBqQEB
+			qgAAswAApQAAlgAAugEBvwEBtgAAqQAAugAAvwAAtQAAywEBxwEBuwICyAEBxQICsgYGxAwMxwsL
+			zQUFuwEBoAAArQEBmQAApQEBnQAAtAEBtQAAnAAApwAAtgAAwwEBwwIAtgEBpgEBrgIClwEBowEB
+			vQEBwgEBowEBoAEBnQEBqAEBwwEByAEBuQEBoQAApQAAtgEBwgEBxQEBxgEBxgEBxwEByQEBygEB
+			zAEBzQEBzgEBzgEBywEBxwEBwwEBvgAAwQAAyQAAzAEBzAEByQAAwgAAuQAAtwAAtwAAvQAAuQAA
+			rwAApwAAnwAAmQAAmgAAmgAAmQAAnAAAogAAqgAAmwAAlwAAqAEBswEBugEBtQEBsQEBqwEBqwEB
+			pgEBmAEBfgEBYQEBUwAAPQAAJgAAFAAACwAABQAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+			BwAAIgAAOAAAVQAAbgEBeAEBlAEBiQEBfAAAfwAApgEBtQEBnQEBrAEBsQAAqgAAowAAmAAAugEB
+			vQEBqQAArgAAvQEBwgAAugAAwQAAywEBvQICyQEByAEBtAUFywkJvgYGywUFwQEBnwAAnAAAlgAA
+			ugEBuQEBtwEBuwEBnAAAnwAAtAAAtgAAxQEBvwEBoAAAuQEAqAEAmAEBnwEBuQICtgEBnwEBmAEB
+			kwAApgEAsAECrAIBsgEBqgEBoQAApAAAsQEBvAEBwwEBxwEByQEByQEBxgEBwgEBvAEBtwEBqgAA
+			pgAAqwAAqQAApgAAqwAArgAArwAAsgAAsQAArgAArAAAtQAAtwAArgAAogAAmgAAmAAAmgAAlgAA
+			lgAAnwAArQAArwAAqgAAoQEBqgEBpwEBpQEBqAAAqgAAuAAAuAEBsgEBoQEBgQEBXwAASwAARAAA
+			KwAAGwAAEAAACAAABAAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABgAAHwAAMgAAUAAAaQEB
+			dQEBjgEBjgEBewAAfwAArQEBuAEBogEBqwAAtQAAogAAmQAAoQAAvwEBuwEBtwAAuQAAwAAAxAAA
+			vgAAsAAAxgEBwAEByAEByAAAuAMDwQYGugMDwwMDxQEBpwAAmAAAkAAAsQAAxgEBxAEBvwEBowEB
+			lQAArQAArwAAwAEBxAEBpgEBrQAAuQAAtAAApAEApwEBrwEAqAEBmAEBlwEBlAAApgAAoQAAjwAA
+			kAAAmgABnQEBlAAAjQABkAABlwAAngEAoQEAoQEAnwAAmwAAngAAowAApwAApQAAogAAnQAAuAAA
+			wAAAwwAAxgAAxgAAwgAAvgAAuwAAsgAAqQAAoAAAlgAAkAAAlAAAlwAAqwEBtQEBuQEBuAEBqQEB
+			oQEBmAEBngEBjgAAiQAAkgAAsAEBsgEBowEBhAEBZAAAVwAASwAANQAAIQAAFgAADQAABwAABAAA
+			AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQAAHAAALQAASAAAYwAAcQEBjgEBlwEBfQAAfwAA
+			swEBtAEBowAArQAAsQAAnwAAmwAArAAAuwEBuQEBwgEBwwEBvQAAwgAAxAAAtAAAuAAAwQEBxwEB
+			zQEBwAEBtQICqQEBvQEByAEBtAAAngAAkAAAogEBugEByAEBxwEBtwEBmAAApAAAsgAAtAAAwwEB
+			swEBogAAwAAAxAAAwwEBwAEBvwEBtgEBnwAAkQAAjgAApwEBvgEBvAEBqwEBoQEBmQABlQABmwEB
+			nwEBngAAmwEAmwEAmgAAmgAAmwAAnAAAmwAAnAAAnQAAoQAArwAAvwAAxAAAwwAAxQAAxgAAwwAA
+			vgAAugAAsgAAqgAAnAAAkQAAlwAAqQEBrwEBswEBvQEBvwEBqAEBlQEBjgAAlwEBkwAAhAAAiQAA
+			mQEBpQEBmQAAfwAAbgAAZQAAVgEBPwAALAAAHgAAEQAACwAABQAAAgAAAQAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAQAABQAAGAAAKQAAQQAAXQAAcAEBhgEBlwEBgQAAfQAArgEBpwEBpAAAsAAApwAA
+			mwAAnQAAsQAAvQEBwQEBvwEBvwEBuQAAwQAAyAAAxAAAuQAAugAAwwEBzgEBygEBqgAApwAAqwAA
+			ygEBxgEBsQAAngEBlAAAtAEBsQEBvAEBxAEBqQEBtQEBtgAArwAAtgEBvQEBoAAArAEBwQAAxQAA
+			xwAAxwEByAEBvAEBnQAAjQAAjQAApQEBtwEBwwEBwgEBvQEBuAEBtAEBvAEBxAEBwwEBtgEBwQEB
+			wgEBwwEBwgEBwQEBwQEBxAEBxgEByQEByAEBwwAAwgAAwwAAwwAAwAAAvQAAugAAtAAAqAEBnQAA
+			pQEBuQEBwAEBxQEBwwEBtAEBnAAAkQAAkQAApAEBqAEBnAAAmgEBmQEBlwEBhwAAfAAAeAAAbgAA
+			XAAASQAANgAAJgAAGAAADgAACQAAAwAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABAAA
+			FQAAJgAAOQAAVgAAbgEBgwEBkQEBgwEBfgAAqAEBnwEBpAAAsQEBpQAAmAAAnQAAuAEBwQEBvgEB
+			vgEBuwAAuwAAwQAAyQAAzQAAywAAuAAAugEBzgEBzQAAtgEBqwAAngAAuAAAywEBwQAAtgEBnAEB
+			qAEBugEBoQAAqgEBuAEBvgEBxwEBvgEBpgAAvAEBqAEBmwEBvwICwQEBwAAAwAAAvQAAwgEBvAEB
+			qgEBlQEBlwEBsgEBvQEBwwICwgICvAICuAICswICtAICtAICqgEBwQICxwICyQEBxgICwwICwAIC
+			vgICvAICuQEBtQEBuQEBuwAAvQAAwgEBwwEBvQEBsQEBowAAowAAsgEBvgEBxAEBwgEBswEBpQAA
+			ogAAmgAAmQAAsQEBvgEBuAEBrwEBmQEBkQAAiwAAjwAAhwEBegAAaAAAXAAARwAANAAAIgAAFAAA
+			DQAABwAAAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABAAADQAAIgAAMgAATwAAZgAA
+			ewEBjwEBhgEBhAEBqAEBnwEBqAEBrgEBowAAlAAAoAAAuAEBvwEBugEBvAEBsgAAvwAAwwAAyAAA
+			zgAA0AAAxAAAqAAAxwEBzgEBxAEBqAAAowAAnQAAuwEBvQEBvQEBrQEBmgAArwEBtwEBlgAAowAA
+			vAEBzQEBzAEBrAEBswEBuwEBmAEBpAICyAMDwQEBtAAAswAAtAAAvgEBvAEBqwEBlwAAngEBtAEB
+			yQICzQMDzgQEygUFxgYGwgYGvAUFqQQErAQEuQYGwwgIxwoKyAwMzQ4OzA4OxgwMvwkJuwYGtwIC
+			sAAArgAAqwAApAAAnQAAnQAAqAEBtAEBtAAApwEBqAEBpgAAqQAAtAEBowAAmAAAuAEBxQEBvgEB
+			rAEBkAAAjgAAmQAAngEBkAAAhAAAegAAbQEBWAAARAAALwAAHgAAFAAACgAABQAAAQAAAQAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAADAAAHAAALwAARQAAYAAAdgEBigEBhAEBhAAAnQEB
+			nwEBpwEBpgAAmwAAkgAAqgAAvAEBtAEBtwAAswAArgAAuQAAxAAAxAAAxAAAygAAzwAAsgAAsAAA
+			xQEBywEBsQEBpQAAmgAApQAAtwEBqQEBuAEBqwEBmQAAqgEBuAEBpAAAsQAAxgEB0AEBwAEBrgEB
+			xAICsgEBlAEBqAEBwwICtgAApQAApwAAuAAAxAEBvwEBsQEBoQAApQAAtAICwQQEyAYGywcHzwgI
+			0QgI0AkJyQoKugoKrQgItAsLvA0NwhER0RUVzhUVwxERuQwMsAcHqgICpgAAogAAnAAAkgAAlgAA
+			qwEBrwEBtAEBqAAAmgAAqQAAvAAAxgAArwAAmwAAsgEBxAAAuwEBogEBjQAAjgAApgEBsgAAqgAA
+			nAAAjQEBdwAAYgAAUQAAPwAALwAAHwAAEQAACAAAAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAgAACAAAGQAAKQAAPAAAVgAAbwEBgwEBgQEBgAAAlQEBogEBogEBlwAAkQAApQAA
+			uQEBvQEBqAAAsgAAnwAAmAAAtwYGwQAAwQAAtQAAugAAxgAAyQAAqQAAsQAAyAEBwwEBqAEBowAA
+			nAAArwEBrwAApAAAtAEBqAEBoAAAsgEBwgEBvAAA0AAA0wAAzQICswICtwICyQEBrgEBmQAArwAA
+			vAAAsQAApwAApwAAvgEBxgAAuwAApQAAtAAAtgICtgYGyg0N1A4O0gsLzwoKywkJyQgIyQgIyQkJ
+			yQsLxwwMzQ8P3hUV2hQUzw8PwwoKswUFqQEBqAAAnAAAlAAAmQAAqQAAtwEBtQEBpwAAnAAArAEB
+			xAEBygAAsgAAogAAuwEBwQEBsgEBmgEBjAAAlgAAqwEBtgAAugEBsgEBlQEBfAAAbgAAYwAAWAAA
+			RgAALwAAHgAADwAABwAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQAA
+			FAAAIgAAMwAASgAAYgAAeQEBfAEBegAAkAEBpgEBpAEBkgAAkAAAswEBwgEBqwAAqAAArgAAlwAA
+			lAAAlgAAwwkJyQEBxwAAwQAAvgAAwwEBsgAAqAAAwwAAyAEBrAAAqgAAqQAAnAAApwEBrQEBnAAA
+			pgAApAEBrgEBvQAAyAEB0gEB5gEB0gQEwAQEqwEBxQICygEBsgEBowAAsAEBuQEBrwEBrQAAsgAA
+			xQEBxQEBtQAAmQAAsgEBtwEBrAQEugoK2hMT5hMT4g4O3g0N2w4O2A4O1w4O3A8P3A8P1QwM0wsL
+			zwgIyQUFvgMDswEBpQAApQAAtgEBwAAAxQEBvgEBrQEBngAAqwEBpQAApwAAnwAAmwAAtgEBugEB
+			pQEBkAAAjgAAnQAAtwEBwQEBtgEBnwEBjAAAfgAAgwEBgwEBdQEBXAAAQQAALQAAHAAADQAABAAA
+			AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAwAACgAAGwAAKwAAPAAAWAAA
+			bwEBdgEBdAAAjQEBngEBogEBjwAAqAAAuQEBuQEBoQAArwAAaAEBlQAAlAAAlAAAyRcXzQUFyQAA
+			yQAAygAAwAEBqgAAoQAAswAAxwEBvgEBngAAqgAArAAAogAApgAArgEBogAAnQAAmwAAuQEByAEB
+			zwEB0AEB1AMDxwYGqQQErAMDxwICygEBtwEBoQAAqwEBsgICrQEBtAAAvgAAwwEBxQEBtQAArQEB
+			vAICvgEBqQEBoAICtAUFzwoK3QwM4AsL3gkJ3AkJ1QgIvAMDuAMDtwUFrAMDswMDrAICqgEBuQEB
+			xQEBxAEBwwEBuQEBngAAmQAAogAArgAArAAAmwAAlgAAoAAApQAAlwAAlAAAkAAAnwEBtAEBugEB
+			rgEBnwAAmwAAnAEBmgEBkwEBiwAAeAEBWgAARgAALQAAGQAACwAAAQAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABAAAFgAAIgAALwAASgAAZAAAbgEBbwEBiQEBmAEB
+			ngEBkwAAtAEBtgEBqQAAoQAAawEBLgAAkwAAlAAAlAAAxwwMtwQErgEBowAAuwAAzAEBugAAowAA
+			oQAAtQAAxgEBqwAAnQAAnwAAqwAAogEBogAAsAEBrAEBmAAAngAAuwEBygEBzQEBzQEBwgICsgMD
+			nQICogMDyAQEzgICwwEBqwEBogAAoQAAoAEBtAEBwwEBygAAvQAArgAAwwAA0gEBzgICvwICqgEB
+			qQEBtgICwAICxAICwwICuQEBugAAwwEBxgICrgICqwAAuwEBygEByAAAwAAAxAAAvQAAqAAAqAAA
+			swAAtQEBrwEBqQAAtAEBwwEBxAEBtQEBmwAAowEBowAAoAAAogAAowAAqQAArgEBqwEBowEBpgAA
+			ngEBjQEBeQEBXgAAQgAAKgAAFQAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAQAACgAAGwAAJQAAOgAAVAAAZwEBbAEBfQEBjQAAngAAmwAAsgEBrAAAqAAA
+			rgAARQAAFAAAOAAAlAAAlAAAuwMDowEBnwAAnAAAogAAvwAAyAEBtAAAqAAAqAAAwQEBugEBnQAA
+			ngAAogAAqwAAmQAAmQAArgAAtQEBmgAAmAAAtQEBwwEBwAAAxQEBwAEBrgAAnQICpAMDxAUFzQUF
+			xgICuwEBqAEBmQAAkgAAnQAAuQEByAEBxgEBwgEBygAA0wAA1QAAzQAAvgEBsQAAtQEBvwAAswAA
+			rQAAtAAAwgAAzgAAzwAAzwAAyQEBxAEByAEBywEBvAEBoQAAsAEBwwAAvgEBnAAAswEBxgEByAEB
+			uwAAsgAAtQAAtgAAtAAAsQAAsgAAuAAAugAAtgAAtAEBuAEBuQEBsgEBpAEBjAEBcwAAWQAAPQAA
+			EQAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			BAAAEwAAHgAAKQAARAAAXAAAZgEBcQAAgAAAmQAAowAApgAAoQAAqAAAVQAAJAAAJAAAlAAAlAAA
+			lAAArgAAogAAngAApwAAogAAsQAAwQEBwgEBuAAAsAAAtgAAxQEBqQAAlwAAnAAApgAAsQEBmwAA
+			kwAAoQAArwEBogEBmwAAsQAAwwEBwQEBwAAAwgEBswICoQICpgICuQMDwAUFwwICxQICvgEBrAIC
+			lQEBjQEBmwEBsAMDvQMDvgICwgICwwICxAEBwgAAtwAAqAAAnwAArAEBtQEBxgEBzQAAzgAAzQAA
+			wwAAvAAAxgEByQEBtwEBowAAqQEBvQAAzwAA1AAAygAAyAAAuwAArwAAswAAtAAAsAAArgAAqwAA
+			qgAArwAAtgAAuwAAvAAAvgEBuwEBtgEBqwAAmwEBhQEBbAEBUAAAGgAABAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAACQAAFQAAHgAAMAAA
+			TQAAXAAAYQAAbQAAhwAAnwAAlgAAkAAAagAAUwAAQwAAlAAAlAAAlAAAlgAApQAApQAAoAAAsgAA
+			nwAApwAAtQAAvQEBuQAAtgAAtQAAwwEBvAAAnAAAlQAAmgAArQAAuAEBnAAAkAAAmQAApgAAoQEB
+			mwAAsgEBwwEByAEBwwEBxAEBuwICqQEBnQEBrAICsAMDvQUFxAMDvwICuAQErwQEmAICkgICmAMD
+			ogUFogQEnwICmgEBnwAApAAAngAAnQAAogAAsQAAwQEByQEByQEBxQEBwwEBwwEBugAAqAAAlQAA
+			nwAAuQAAyQAAxQAAxAAAuAAAsQAAswAAsAAArgAApgAAoAAAoAAAngAAnAAAnQAApgAAwQEBwAEB
+			uAAAsgEBmQAAhwAAegAAawAAKQAAFwAACgAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAADgAAFwAAIgAAPQAAUAAAVQAAYAAAggAA
+			kAAAiAAAigAAdgAAbwAAkwAAlAAAlAAAlAAAmAAApAAAmwAAnQAAtwEBpAAAoQAAsAAAuQAArwAA
+			sAAArgAAvAAAxgEBrwAAmAAAmQAAnAAArQEBtwEBoAAAkAAAlQAAmgAAmAAAmAAAsgEByAEByQEB
+			xAEBwQAAvwEBtQICpwEBsAICtgICtgUFsgQEtwQEvwYGwQkJsgkJnQYGnAUFpQUFqAMDogICnwAA
+			tgAAswAAsQAAtgAAsQAAswAAswAAsgAAswAArgAAqAAAnAAAlQAAngAAtAAAwQAAwwAAvAAAuwAA
+			uQAAtgAAsgAAoQAAmgAAoQAAmQAAmAAAlgAAlgAAlAAAlQAAngAAqAAApwAAlAAAHwAAEwAAEAAA
+			DwAADAAABwAAAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAQAACAAAEAAAGgAALQAARQAASwAAXQAAfQEBfgAAgAAAbgAAdQAAjwAA
+			kgAAkwAAlQAAmwAAoQAAqAAAmQAAjQAArAEBsQAApAAArwAAuAAAtwAApAAAowAArwAAwgEBxQEB
+			qgAAmgAAmwAAmwAAsQEBuAEBpgAAmwAAmwAAnAAAmgAAmwAApwEBvQEBxwEBwwEBwAEBwAEBwAIC
+			twMDsAEBuAICsAEBpQEBpQEBqAQEqQYGogQElQICkgEBmQICpAICowEBpQAAuQEBwQEBuQAAtAAA
+			uAAAtwEBqwAAoAAAmwAAmQAAmAAAogAArgAAswAAtAAAtQAAlAAAkwAAjAAAkQAArQEBswAAowAA
+			mQAAkQAAiwAAlgAAoQAApgAAmwAAlAAAkgAARQAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AQAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAgAACgAAEgAAHgAANQAAQwAAWQAAZwAAbQAAdwAAUgAAiQAAjQAAkQAAkgAAlAAAmgAAqgAA
+			owAAsAAAigAAlQAAuQEBqwAAqwAArgAAtAAArAAAnAAAnwAAswAAyAEBwwEBpwAAmQAAmwAAogAA
+			tQEBtgEBpwAAogAApwAArgAAqwAAnQAAmwAAqgAAwgEBxgEBwgAAwwEBxgICwwMDvAQEwgMDvgMD
+			rgEBnQEBmwICqwMDrwUFrAgInQUFmQIClQEBlgAAmgAAsQEBvQEBtAAAsAAAtgEBqQEBkgAAkQAA
+			qgEBsgEBpwAApAAAogAAowAApAAApgAAlAAAkQAAlQAApQEBpwEBrgEBpAEBmQAAjwEBiQAAigAA
+			pQEBsgEBkwEBXwAALQAADQAACgAACQAACAAABgAABwAABwAACAAACgAADAAACgAABgAAAwAAAQAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAADQAAFgAA
+			JwAANwAASwAAVQAAYgAAKwAAMwAAhQAAiQAAjgAAlgAAnAAAoAAAoQAAqgAArQAAqgAAigAAsgEB
+			tgAAqwAAoQAAowAAsgAApAAAmgAAowAAvgAAyAEBvwEBpAAAmgAAmgAAoQAAtAEBtQEBpgAApwAA
+			rAAAtwAAvAAAsgAAoAAAoQAAswAAwgAAxQEBxgICxgEBvwICvwQEzAYGzAUFugQEpQMDoQMDrAUF
+			qwUFoAQEkwICigAAigAAkAAAmgAApgAAsQAAqQAAmgAAlwAAoQEBnwEBngAAuAEBtAEBowAAlgAA
+			kwAAkwAAlQAAkwAAjgAAkwAAtgEBtwAArAEBpQAAogEBlgAAjAAAhQAAhQAAkgEBrgEBtAEBgwEB
+			YwEBWQEBVAEBUwEBUQEBSgAAPAAAMQAAJAAAGQAAEAAACAAABQAAAgAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABwAAEAAAHAAALAAAOgAASAAAWAAA
+			EAAAFgAAMgAAhgAAjgAAqAAAvAEBxwEBswAArwAAqQAAtAAAngAAoQAAwAEBtgAApgAAmwAAqAAA
+			swAAnQAAmQAAoQAAvgEByQEBvgEBqAAAmgAAlwAAnwAAsgEBtAEBpwAApQAAqgAArgAAtwAAvQAA
+			ugAAtQAAugAAxwEBzAICxQEBwgEBxQICzAQEyQQExwMDxAMDtgICrQICpQEBpgEBpAAAnwAAmQAA
+			lgAAngAAngAAmwAAogAAsAEBswAAtgAAugEBsQEBpwAAsQEBuAEBrwEBmwAAjAAAiAAAlAAAkgAA
+			jgAAnAAAtgEBwAEBwQEBtgEBqQEBkgEBhQAAggEBfwAAgAAAiAEBlAEBmgEBlAEBiQEBeAEBZAEB
+			UwAAQAAAKwAAHAAAEwAADAAACAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAACwAAEwAAIAAALgAAPAAADwAAAAAAAQAAHAAAQwAAiAAA
+			kgAAsgEBygEByAEBtQAAswAAtQAAqwAAmQAAtgAAwgEBqgAAnQAAngAArAAAogAAmAAAmQAApAAA
+			vwEBxgEBvgEBrgAAnwAAlgAAnAAAsQAAtAEBowAAoAAApgAAqAAArwAAyAAAzwEB0AAA0QAAzgEB
+			ywEBzAEBzQEByQAAxAAAvwAAwQAAxgEBxAEBrwAAngAAkwAAkAAAlAAAmAAAnQAAowAArAAAuAAA
+			xQAAxQEBwgEBwAEBwgEBwgEBvgEBtgEBtAEBsQEBpQAAkgAAhgAAlQAAkgAAkwAAnQAApgEBuAEB
+			xQEByAEBwQEBsQEBmAEBhQEBegAAdQAAcAEBagEBZgEBYAEBXQEBTQAAOQAAKgAAHgAAFgAAEQAA
+			CgAACAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAABgAADgAAGAAAJAAAMwAABQAAAAAAAAAADQAAKwAAgwAAiAAAkgAAtwEBygEBxAEB
+			uAAAuwAAuwEBnQAAnQAAtgAArQAAmwAApAAArQAAqAAAowAAnAAAngAAqwAAtwAAwQEBwQEBuQAA
+			qQAAnAAAmQAArgAAsQEBoQAAnQAApAAAtAAAxgAA0gAA1gEB1AEBzwAAyQAAyQEBygEBywEByQEB
+			yAAAxwAAxwAAyQEBywEBwQEBsQAAogAAnAAAnAAAoAAApQAAqAAAqgAAtQEBwgEBwwEBwQEBwgEB
+			wwEBxAEBxgEBvQEBuAEBswEBsQAArQAApAAAnAAAlwAAlQAAmgAAnwAApAEBrwEBuQEBvwEBvgEB
+			rwEBmwEBhQEBcAEBYQAAWAAAUwEBTgAAQAAAMAAAIwAAGgAAEwAADQAABwAAAwAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAACgAA
+			EwAAHAAACQAAAgAAAAAAAAAABwAAGAAAKQAAgQAAhgAAlAAAugEByAEBwQEBvAAAvQAAsAAAmwAA
+			qQAAuAEBoQAApgAAwAEBxgEBygEBwQEBrwAAqgAArQAAswAAwAEBuQEBsgAAqgAAkgAAkQAAowAA
+			rQEBqgAApAAAqgAAvgAAzQEB0AEBzgAAygEBwQAAuwAAwgAAywEB0AEB0QEB0QEB0QEB0AEB0AEB
+			0QEB0AEBzQEBxwEBwAAAuAAAtAAArgAAqgAAqgAArwAAuQEBxAEBxgEBwgEBvAEBvQEBxAEBxwEB
+			xAEBwgEBvwAAtgAAsAAAqAAAoAAAmAAAlAAAmAAAmgAAkwAAkwAAmQEBlQEBigEBfAAAdgEBZgEB
+			UQAASgAAPwAAMgAAJQAAGgAAEQAADgAACAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAADAAAAwAAAwAAAQAAAAAA
+			AAAAAgAACAAADgAAIQAAgQAAhAAAkQAAsQEBwQEBxAEBvgAAvgAArwAAoQAAsAAAsgAApgAAvwEB
+			ywEBzwEB0AEBzgEBxgEBtwEBtwAAsgAAtgEBtwEBsAEBoAAAlAAAlgAAmAAAogAAsQEBrwEBsgAA
+			zAEB0AEBywEBwQEBvwEBugEBuwAAxAAAzwAA1QEB1QEB1AEB1AEB0wEB0wEB0wEB0wEB0gEB0gEB
+			0QEBzgEBygEBxgEBwwEBvwAAvwAAwwAAxQEBxgEBxwEBxQEBvgEBuAEBvAEBwwEByAEBygAAyAAA
+			xQAAvgAAsQAAoQAAlwAAkQAAjAAAgQAAfQAAfwAAfwAAcwAAYgAAVQAAUQAATAAAPwAALAAAHwAA
+			FgAAEAAADAAABwAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA
+			JwAAfQAAfwAAhwAAmwAAtwEBvQEBwQEBvgAAsgAAoAAArwAAowAAqQAAtgAAvgEBygEBzgEBxAEB
+			qwEBqwEBtAEBqwEBpwAArgAAtAEBsgAAowAAkgAAlAAAngAAqwAAsAAAuwAAyQEBzwEBzgEBxQEB
+			xQEBxgEBxwEB0AEB1wEB2QAA1wEB1QEB1AEB1AEB1QEB1QEB1AEB0gEB0AEB0AEB0AEBzwEBzQEB
+			yQEBxgAAxAAAwgAAvgAAuwAAuQAAuQAAvAEBvgEBvwEBwAEBwwAAxQAAxQAAxAAAvgAArgAAogAA
+			mQAAlAAAlgAAjAAAewAAagAAWwAAWAAAVQAASwAAOwAALgAAIgAAGQAAEgAADQAACAAAAwAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAFwAALgAAdwAAfAAAgQAA
+			kwAArgAAuAAAvAEBvgEBswAApQAAnwAAmwAApwAArgAAvAEBwgEBxQEBxgEBswEBoQAAoAAAnAAA
+			oQAAoAAAmgAAlAAAkwAAlQAAmQAApwAApQAAoAAArQAAxwEBzwEB0AEBzQEBxQEBxgEBxwAAzgEB
+			1AEB1QEB1AEB0wEB0wEB0wEB0gEB0gEB0AEBzwEBzQEBzAEBzgEBzgEByQEBxQEBwQAAwAAAvQAA
+			vAAAuQAAuAAAtwAAtQAAsQAArQAAowAApwAApAAAngAAoAAAowAAoAAAlQAAjQAAgQAAcgAAZgAA
+			ZAAAYgAAWgAATAAAPQAAMAAAIwAAGQAAEgAADQAACAAAAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAACwAAGAAAJAAAcQAAdAAAfQAAkgAAqAAArwAAtgEB
+			uwEBtQAAoQAAjwAAmAAApgAArgAAugEBtAEBvAEBwwEBwAEBrwEBoQAApAEBoAAAlwAAjwAAjQAA
+			jAAAjwAAlQAAmwAAqQAAtwEBxQEBzQEBzwEBzwEBzwEByQEBxAEBugAAtQAAuwAAxQAAxgAAxgAA
+			xQAAxAAAwwEBwwEBxAEBwgEBvgEBvQEBvwEBvwEBuQAAtAAAtAAAtAAAsgAAtAAAnAAAmgAArgAA
+			qQAAogAAlAAAoQAAmQAAkwAAkgAAjQAAhgAAewAAdQAAcgAAcAAAaAAAXQAAUwAARgAAOwAALgAA
+			IwAAGgAAEwAADQAACAAAAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAQAABAAABwAACwAAGgAAZwAAbAAAdgAAjAAAmAAApgAArAAArwEBsgEBoQAAkAAA
+			kwAAoAAAowAArAEBrwEBrAEBtAEBvwEBuQEBpAAAogAArgEBtgEBuAEBsQEBqgEBpgEBpQAAoAAA
+			nQAApAAAsAEBugEBwwEBygEBzQEBzgEByAEBvgAAuAAAtAAArAAApgAApgAAogAAnwAAngAAoAAA
+			pgAAqwAAqwAApwAAowAApAAApgAApgAApwAAqAAAmQAAlwAAlwAAlQAAlwAAlgAAlAAAkAAAiAAA
+			gwAAfAAAewAAegEBfAEBegEBdAAAZgAAVwAATwAARQAANgAAKgAAIwAAGQAAEwAADQAABwAAAgAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAACAAAHQAAMwAAYAAAaQAAfAAAiwAAmQAAnwAAowEBqAEBpAEBkQAAigAAkQAAmwAAowAA
+			swAArwEBqQEBsgEBugEBrgEBnAAAnQAApgEBswEBwAEBygEBygEBxgEBvQEBswEBpwAAoAAAnQAA
+			pwAAsgEBvwEBxgEByAEBwwEBvgAAuAAAtgAAsQAAqwAAoQAAmwAAmQAAmQAAlwAAlwAAlAAAkgAA
+			kQAAkAAAkQAAlwAAoQAAnQAAoAAAnQAAlQAAiwAAhQAAgAAAfwAAgQAAhgAAhwAAggAAeQAAcQAA
+			ZQAAXAAAVAAATAAAQQAANQAAKwAAIgAAGQAAEQAADAAABgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAADgAAHQAA
+			KgAAUQAAWQAAaAAAegAAiQAAkAAAlQAAnQEBngAAjgAAhgAAlwAAtgAAtgEBuwEBtwEBqQEBoAAA
+			pgEBqwEBqQEBnQAAkQAAmwAAqwEBvwEByAEBzQEBywEBxwEBwQEBuQEBqgEBoAAAnQAAogAArAEB
+			wQEByQEBxgEBvQEBsgAAqwAArwAAsQEBrgAAqAAAnwAAmQAAkwAAjAAAhAAAgwAAggAAjQAAjQAA
+			jwAAjQAAigAAhQAAfgAAfwAAgAAAhQAAhQAAfgEBeAAAbwAAZgAAXQAAVQAATAAARQAAPAAAMgAA
+			JgAAHgAAFQAADgAABwAABAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABgAADAAAEgAAFAAAQgAASAAAUwAA
+			awEBdwAAgQAAhQAAkAEBlAAAlQAAoQAArQAAswEBtgEBuwEBuwEBtwEBrQEBpAEBmQAAnQEBoAEB
+			mgEBkAAAkAAAowEBtgEBwgEBwwEBwwEBvwEBugEBsgEBqAAApgAAqgEBuwEBxQEByQEBxgEBwQEB
+			vQEBsAAAqQAAqQAAqQAArAAArgEBqQAAoAAAkAAAjgAAiwAAjAAAiwAAiwAAjAAAiwAAhwAAggAA
+			fgAAdgAAbQAAYwAAXgAAWwAAVwAATwAARwAAQwAAPgAANQAAKwAAIQAAGAAAEQAADAAABQAAAwAA
+			AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAwAABAAABAAABAAAMgAAOAAAQQAAVQAAZQEBbwEBeAAA
+			gwEBiQEBkgAAmgEBoAAApwEBrQEBsAEBtgEBuAEBtgEBtgEBrQEBqQEBpQAAnwAAmwEBjAAAiAAA
+			kQAAnAEBowEBqAEBqwEBqgEBpQEBpgEBrQEBuAEBvQEBvwEBvwEBwQEBwgEBvgEBvwEBvAEBtwAA
+			qwEBpQEBqQEBpQEBngEBlgEBkgAAigAAgwAAfAAAcwAAawAAZQAAYgAAXgAAVgAATwAATAAATQAA
+			SwAAQwAAPgAAOQAANQAAKgAAIQAAGAAAEwAADgAAAQAABAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAMgAAPwAAUQAAYAAAawAAdgEBfwEBgwAAhwAA
+			jwEBmAEBlwEBowEBpgEBqgEBrQEBsAEBsAEBsgEBrQEBoQEBlAEBiAEBgwEBgwEBhQEBiAAAiQAA
+			jgAAjgEBkgEBlwEBowEBqQEBrAEBrwEBrwEBrwEBrgEBrQEBqAEBogEBnQAAlQAAkQAAigAAfwAA
+			dwAAcwAAbwAAagAAZQAAXwAAXAAAVQAAUQAASgAARgAAQgAAQgAARAAAOgAAMwAALAAAJAAAHwAA
+			GQAAFAAADwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAJgAAMQAAQQAAUQAAXAAAZgAAbwEBdQEBcgAAcAAAdgAAXgEBcgEB
+			ggEBiwEBlQEBngEBowEBpQEBpgEBpgEBoQEBmQEBjQEBhAEBgAEBgwEBgwEBggEBgQEBhgEBiQEB
+			hQEBgAEBggEBgQEBfwEBfQEBfwEBggEBhAEBggEBfwEBdgAAcgAAbgAAawEBYgEBXgEBWAAAUwAA
+			UAAATgAATQAASAAARgAARQAAQAAAOgAANQAALgAAJAAAHQAAGgAAFgAACQAACQAABQAAAQAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAHgAAJwAAMAAAQAAATgAAWAAAYQAAaAEBZQAAXgAAXAAAJAAALwAAOAAAPgAASQEBWQEB
+			ZAEBdQEBhAEBjwEBkwEBlgEBlQEBkAEBjAEBjQEBkAEBkAEBlAEBlgEBkwEBkgEBjgEBiAEBhAEB
+			gAEBegEBdwEBcwEBbgEBagEBZgAAZAAAXwAAXAEBWwEBWwAAWQAAVAAATwAASgAARQAAPwAAOQAA
+			NgAAMQAAKwAAJgAAIQAAGgAAFgAAEgAACAAABQAAAwAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAA
+			JgAAMAAAPQAARQAATwAAUwAAVAAAVQAAUwAAFwAADwAABgAABQAABQAABAAACwAAGgAAOAAAWgEB
+			bwEBewEBfQEBggEBhAEBhwEBhgEBhwEBhgEBhQEBhwEBgwEBggEBgAEBfAEBewEBdwEBdAEBcAEB
+			bQEBaQEBZgAAXgAAWgAAVgAATgAASQAAQwAAPQAAOAAANQAAMQAAKgAAJQAAIAAAGwAAFgAAEwAA
+			EAAABAAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAIwAAKgAAMAAA
+			OAAAPwAAQwAARQAARQAARgAABQAAAAAAAAAAAAAAAAAAAAAAAQAABgAADgAAHQAAMwAARwEBVwEB
+			YAEBZgEBagEBawEBbgEBbgEBbQEBawEBagEBaAAAZwAAZAAAYgAAXAAAWQAAVAAATwAASwAARQAA
+			QAAAOwAANQAAMQAALQAAKAAAJAAAIAAAGwAAFgAAEAAADgAAAQAAAQAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAA=
+		</image>
+	</surface>
+	<surface name="boss2_body" size="6" prim="Triangle" parent="blackhole">
+		<coordinate>
+			69.538410, 63.161297, 0.000000
+			5.538425, 63.161312, 0.000000
+			5.538410, -0.838696, 0.000000
+			5.538410, -0.838696, 0.000000
+			69.538410, -0.838699, 0.000000
+			69.538410, 63.161297, 0.000000
+		</coordinate>
+		<normal>
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+			0.000000, -0.000000, 1.000000
+		</normal>
+		<model>
+			37.538410, 31.161304, 0.000000
+		</model>
+		<texture>
+			1.000000, 1.000000
+			0.000000, 1.000000
+			0.000000, 0.000000
+			0.000000, 0.000000
+			1.000000, 0.000000
+			1.000000, 1.000000
+		</texture>
+		<image name="boss2_body.bmp">
+			Qk04AAwAAAAAADYAAAAoAAAAAAIAAAACAAABABgAAAAAAAIADADDDgAAww4AAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+			AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA